管道
Go語言提倡使用通信的方法代替共享內存
代碼
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
//計算得到的數組的值,把值發送到管道
c <- sum // send sum to c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
//定義一個整形管道
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
//阻塞從管道接收數據
x, y := <-c, <-c // receive from c
fmt.Println(x, y, x+y)
}
帶緩衝的管道
帶緩衝的管道,往裏面放元素不會阻塞
func main() {
// 創建一個3個元素緩衝大小的整型通道
ch := make(chan int, 3)
// 查看當前通道的大小
// 發送3個整型元素到通道
//把值往管道里放元素,不會阻塞
ch <- 1
ch <- 2
ch <- 3
// 查看當前通道的大小
fmt.Println(len(ch))
}