Go十大常见错误第4篇(for/switch和for/select做break操作的注意事项)
前言
这是Go十大常见错误系列的第4篇:for/switch和for/select做break操作退出的注意事项。素材来源于Go布道者,现Docker公司资深工程师Teiva Harsanyi。
本文涉及的源代码全部开源在:Go十大常见错误源代码,欢迎大家关注公众号,及时获取本系列最新更新。
场景
案例1
大家看看下面这段代码:
for {
switch f() {
case true:
break
case false:
// Do something
}
}
如果函数调用
f()
返回的结果是true
,进入到case true
分支,会发生什么?会退出for循环么?答案是:只退出了switch语句,并不会退出for循环,所以break后又继续执行for循环里的代码。
案例2
再看下面这段代码
for {
select {
case <-ch:
// Do something
case <-ctx.Done():
break
}
}
同样地,如果执行了break语句,退出的只是select语句块,并不会退出for循环。
那在上面2种场景里,如何退出for循环呢?
可以结合label和break进行实现。
loop:
for {
select {
case <-ch:
// Do something
case <-ctx.Done():
break loop
}
}
对于上面的代码,loop是一个label,
break loop
如果执行了就会退出for循环。推荐阅读
- Go十大常见错误第1篇:未知枚举值
- Go十大常见错误第2篇:benchmark性能测试的坑
- Go十大常见错误第3篇:go指针的性能问题和内存逃逸
- Go switch使用说明
- Go for/break使用说明
- Go select语义
公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。
个人网站:Jincheng's Blog。
知乎:无忌。
福利 我为大家整理了一份后端开发学习资料礼包,包含编程语言入门到进阶知识(Go、C++、Python)、后端开发技术栈、面试题等。
关注公众号「coding进阶」,发送消息 backend 领取资料礼包,这份资料会不定期更新,加入我觉得有价值的资料。还可以发送消息「进群」,和同行一起交流学习,答疑解惑。
References
- https://itnext.io/the-top-10-...
- https://github.com/jincheng9/...
- https://github.com/jincheng9/...
推荐阅读
- 为什么“专家”的预测都是错误的()
- 解决pycharm代码中非错误波浪线问题
- 清明假期去哪徒步?十大美景推荐
- ios-|ios- 常见数据类型转换
- 胡希恕《常见病辨证用方提纲》(十六)急慢性肾炎
- 解决WordPress安装错误:过多的重定向
- Go|Go Context 应用场景和一种错误用法
- kaggle|word2vec和常见CNN+RNN网格结构组成的文本分类模型
- 2019年高端铝合金门窗十大品牌有哪些()
- HTML基础