转-Golang语言-里面select-case和time.Ticker的使用注意事项

上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.Ticker的使用注意事项(真实的应用场景是:在测试收包的顺序的时候,加了个tick就发现丢包了),觉得很有意思,记录一下。

问题出在这个select里面:

select { case ch <- i: case <-tick.C: fmt.Printf("%d: case <-tick.C\n", i) }

当两个case条件都满足的时候,运行时系统会通过一个伪随机的算法决定哪个case将会被执行 所以当tick.C条件满足的那个循环,有某种概率造成ch<-i没有发送(虽然通道两端没有阻塞,满足发送条件) 解决方案1: 一旦tick.C随机的case被随机到,就多执行一次ch<-i (不体面,如果有多个case就不通用了) select { case ch <- i: case <-tick.C: fmt.Printf("%d: case <-tick.C\n", i) ch <- i } 解决方案2: 将tick.C的case单独放到一个select里面,并加入一个default(保证不阻塞) select { case ch <- i: } select { case <-tick.C: fmt.Printf("%d: case <-tick.C\n", i) default: }

两种解决方案的输出都是希望的结果:

原文发布于微信公众号 - Golang语言社区(Golangweb)

原文发表时间:2016-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GIS讲堂

wms常用操作

自从换了工作就很少有时间上网了,新的单位不让上网的,所以博客也有好久没有更新了,虽然博文的质量一般般吧,但是觉得还是坚持写下去比较好,今天,北京,雨天,写点最近...

22440
来自专栏企鹅号快讯

PCB设计的一些实战小经验总结

PCB设计实战小经验 PS:以下操作皆是在PADS中完成。 1.操作习惯设置 PCB栅格间距,一般设置为与最小安全间距一致,如下图示,都为6mil;方便走线时,...

21680
来自专栏利炳根的专栏

从零开始在iPhone上运行视频流实时预测模型应用,只需10步

1、买一台苹果电脑,建议MacBook Pro。

13000
来自专栏灯塔大数据

职场必备:Excel2016四个超强的数据分析功能

摘要 三维地图、预测工作表、引用外部数据查询、数据透视表更强大的功能改进、将Excel 表格发布到Office 365 Power BI实现数据的商业智能分析...

29970
来自专栏代码GG之家

google 分屏 横屏模式 按home键界面错乱故障分析(三)

google 进入分屏后在横屏模式按home键界面错乱( 三) 你确定你了解分屏的整个流程? ? 故障解析系列文章列表: google 分屏 横屏模式 按hom...

25260
来自专栏FreeBuf

一种绕过限制下载论文的思路

注:本文下面的内容仅讨论绕过思路,作为技术交流之用。大家下载论文还是应该通过正规渠道,付费下载,尊重各位站长的劳动成果。敏感图片和代码中涉及站点的内容均已打码。

15920
来自专栏phodal

前后端分离之领域模型的思考

我们总以为前后端分离之后,我们就可以写出更干净的View。然而,现实并没有那么美好。因为在我们的View层里,不仅仅只有Template,还有Controlle...

21050
来自专栏开源FPGA

基于FPGA的Uart接收图像数据至VGA显示

系统框图 ?   前面我们设计了基于FPGA的静态图片显示,并对一幅彩色图片提取了灰度,学习了RGB转Gray算法。这是基于一幅静态图片的,那么后面我们要怎么模...

31590
来自专栏维C果糖

GitHub 主页介绍及修改个人信息

接着「敲开 GitHub 的大门 - 注册账号」一文的内容,我们继续往下介绍: ? 标注 1:View profile and more,更多选项视图; 标注 ...

24870
来自专栏腾讯NEXT学位

小游戏内存优化与性能优化

? | 导语 听说你的小游戏内存超标?进来了解一下吧。 本文主要跟大家一起来探讨一下Cocos Creator小游戏开发过程中内存优化、性能优化和包体优化。 ...

4.3K10

扫码关注云+社区

领取腾讯云代金券