如何遍历切片
1.for循环
package main import "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 main import "fmt" func main() { s := []int{1,2,3,4,5} for index, value := range s { fmt.Printf("s[%d]=%d\n",index,value) } }
运行结果
如何对切片进行切割
package main import "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 main import "fmt" func print(s []int, ch chan int) { sum := 0 for _, 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,<-ch fmt.Printf("%d + %d = %d",x,y,x+y) }
运行结果
GPT建议
package main import "fmt" func main() { ch := make(chan int) ch <- -1 fmt.Println(<-ch) ch <- 5 fmt.Println(<-ch) }
如果通道不带缓冲,发送方会阻塞直到接收方从通道中接收了值。如果通道带缓冲,发送方则会阻塞直到发送的值被拷贝到缓冲区内;如果缓冲区已满,则意味着需要等待直到某个接收方获取到一个值。接收方在有值可以接收之前会一直阻塞。