如何遍历切片
1.for循环
package mainimport "fmt"func main(){s := []int{1,2,3,4}for i := 0; i < len(s); i++{fmt.Printf("s[%d]=%d\n",i,s[i])} }
运行结果
2.range 关键字
package mainimport "fmt"func main() {s := []int{1,2,3,4,5}for index, value := range s {fmt.Printf("s[%d]=%d\n",index,value)} }
运行结果
如何对切片进行切割
package mainimport "fmt"func main() {s := []int{1,2,3,4,5}fmt.Println(s[:2])fmt.Println(s[2:])fmt.Println(s[1:3])fmt.Println(s[:len(s)/2])fmt.Println(s[len(s)/2:]) }
s[1:4] 从索引下标1开始到下标为4但是不包括4,也就是索引下标为1,2,3的元素
开启两个线程,分别计算切片的前半部分的和和后半部分的和并显示结果
package mainimport "fmt"func print(s []int, ch chan int) {sum := 0for _, value := range s {sum += value}ch <- sum }func main() {s := []int{1,2,3,4,5}ch := make(chan int)go print(s[:len(s)/2],ch)go print(s[len(s)/2:],ch)// 关闭通道defer close(ch)x, y := <-ch,<-chfmt.Printf("%d + %d = %d",x,y,x+y) }
运行结果
GPT建议
package mainimport "fmt"func main() {ch := make(chan int)ch <- -1fmt.Println(<-ch)ch <- 5fmt.Println(<-ch)}
如果通道不带缓冲,发送方会阻塞直到接收方从通道中接收了值。如果通道带缓冲,发送方则会阻塞直到发送的值被拷贝到缓冲区内;如果缓冲区已满,则意味着需要等待直到某个接收方获取到一个值。接收方在有值可以接收之前会一直阻塞。