标签:关闭 发送 and send rom 阻塞 接收 需要 from
无缓冲通道(阻塞通道) 写入后立即阻塞,需要另一个协程读取通道的数据后,才能继续执行。
通道操作符
ch <- v // Send v to channel ch.
v := <-ch // Receive from ch, and
// assign value to v.
无缓冲通道
ch := make(chan int)
有缓冲通道
ch := make(chan int, 100)
发送方可以关闭通道以指示不再发送值
close(c)
接收方可以以第二个返回值确认通道是否关闭
v, ok := <-ch
循环重复从通道接收值,直到通道关闭。
for i := range c
channel 不像文件;你通常不需要关闭它们。只有当接收者必须被告知没有更多的值时,关闭是必要的,例如终止一个range
循环。
package main
import (
"fmt"
)
func fibonacci(n int, c chan int) {
x, y := 0, 1
for i := 0; i < n; i++ {
c <- x
x, y = y, x+y
}
close(c)
}
func main() {
c := make(chan int, 10)
go fibonacci(cap(c), c)
for i := range c {
fmt.Println(i)
}
}
go tour --Channels 与 Buffered Channels
标签:关闭 发送 and send rom 阻塞 接收 需要 from
原文地址:https://www.cnblogs.com/t0000/p/13344941.html