![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的原理,坐等,非常感谢!!
第二个问题:当执行done<-1时,理论上select会随机执行其中一个case,但是因为第一个case的ch是无缓冲区的,没地方读ch的数据,不会执行,所以只会执行第二个case,所以会跳出for循环,直接close(ch),所以不管执行多少次,最后ch30,31行打印的都是已经关闭的ch,都是0.
#11
更多评论
27行执行结束,29行就有可能立马执行了。case没有加break,会继续执行下一句。所以你for一次就结束了。而且你代码直接放图片,为什么不直接贴代码,也方便别人直接测试。
#1