根据Go 文档:
接收器总是阻塞直到有数据接收
此测试应该失败,因为对于来自通道的最后接收操作,没有相应的 write :
package main
import "fmt"
func main() {
c := make(chan int)
for i := 0; i < 4; i++ { // 4 async reads
go func() {
fmt.Println("received:", <-c)
}()
}
// just 3 writes, 1 write is missing
c <- 1
c <- 2
c <- 3
}
但是脚本在读取 goroutine 中没有失败并显示错误消息,但它成功打印了 3 个值:
收到:1
收到:2
收到:3
为什么会这样,或者我对同步有误解?
弑天下
相关分类