![image.png](https://static.studygolang.com/190704/f138f8320eb7f9fa6062513ee4ad44fa.png)
问题一:第27行执行完,由于ch一直阻塞着,由于29行还未执行,所以应该会立刻发送一个随机数给ch吧?但是我发现第30行是有概率打印出0的,这是为什么呢?
问题二: 如果注释掉29行,改用28行关闭done。那么30行永远打印0。可是select不是随机执行case语句的么?为什么一旦done有输入了,就会执行第二条case呢?
请大神讲解一下chan的原理,坐等,非常感谢!!
30行打印为0是因为createChan里面已经执行了close(ch),第19行与第30不确定哪一条语句先执行,所以是随机的。此时已经执行到了case <- done这一句了。
#6
更多评论
27行执行结束,29行就有可能立马执行了。case没有加break,会继续执行下一句。所以你for一次就结束了。而且你代码直接放图片,为什么不直接贴代码,也方便别人直接测试。
#1