坑,以下例子中,原本以为close掉done channel后,循环会退出。但事实上会进入死循环
for { select { case packet := <-s.avPacketChan: s.sendPacket(packet) case <-s.done: //终止channel break } }
原因:
[A "break" statement terminates execution of the innermost "for", "switch" or "select" statement.
官方文档](https://golang.org/ref/spec#Break_statements)
BreakStmt = "break" [ Label ] .
If there is a label, it must be that of an enclosing "for", "switch" or "select" statement, and that is the one whose execution terminates (§For statements, §Switch statements, §Select statements).
L: for i < n { switch i { case 5: break L // 从L标签处开始执行 } }
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦