go里面select case和time.Ticker的使用

结果如下:

问题出在这个select里面:

当两个case条件都满足的时候,运行时系统会通过一个伪随机的算法决定哪个case将会被执行,所以当tick.C条件满足的那个循环,有某种概率造成ch<-i没有发送(虽然通道两端没有阻塞,满足发送条件)

解决方案:

1: 再被随机到的tick.C里面多执行一次ch<-i

结果如下:

这样有个问题, 如果有多个case就不通用了,因为每个case下面都要去加一个,显得繁琐

2: 把tick.C的case单独放到一个select里面,并在其后面加入一个default,保证不阻塞

测试结果如下:

上述俩种都是希望得到的结果

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容