我的golang版本是1.14
就是学习通道的时候看到一段代码,我运行了一下,发现结果有两种:
package main
import "fmt"
func main() {
chanInt := make(chan int)
defer close(chanInt)
go func() {
for {
res, ok := <-chanInt
if !ok {
break
}
fmt.Println(res, ok)
}
}()
chanInt <- 1
chanInt <- 10
}
代码很简单,新开一个goroutine通过for循环读取通道的数据。
然后我执行的时候发现有两种结果:
而且第二种结果的概率要小一点。
chanInt := make(chan int, 2)
思索许久还是不明白代码的情况,希望大伙帮忙解答一下两个问题:
- 为什么无缓冲的时候,打印结果会有两种情况?【我的理解是:第二种情况应该是:chanInt <- 10之后,携程就读取了res, ok := <-chanInt,还没到打印,主协程就结束了】
- 当有缓冲通道的时候为什么打印不出任何东西?