package main
import "fmt"
func sum(a, b int, c chan int) {
sum := a + b
c <- sum // 把 sum 发送到通道 c
}
func main() {
c := make(chan int)
go sum(3, 4, c)
go sum(8, 9, c)
x, y := <-c, <-c // 从通道 c 中接收
fmt.Println(x, y, x+y)
}
结果:
17 7 24
14.2 通道缓冲区
package main
import "fmt"
func main() {
// 这里我们定义了一个可以存储整数类型的带缓冲通道
// 缓冲区大小为2
ch := make(chan int, 2)
// 因为 ch 是带缓冲的通道,我们可以同时发送两个数据
// 而不用立刻需要去同步读取数据
ch <- 1
ch <- 2
// 获取这两个数据
fmt.Println(<-ch)
fmt.Println(<-ch)
}
结果:
1
2
14.3 遍历channel
package main
import (
"fmt"
)
func main() {
c := make(chan int, 3)
c <- 1
c <- 2
c <- 3
// 遍历时,如果channel没有关闭,则会出现deadlock错误
close(c)
for i := range c {
fmt.Println("i = ", i)
}
}
结果:
i = 1
i = 2
i = 3