Go十大常见错误第4篇:break操作的注意事项

2022年8月4日 272点热度 0人点赞 0条评论

前言

这是Go十大常见错误系列的第4篇:for/switch和for/select做break操作退出的注意事项。素材来源于Go布道者,现Docker公司资深工程师Teiva Harsanyi[1]

本文涉及的源代码全部开源在:Go十大常见错误源代码[2],欢迎大家关注公众号,及时获取本系列最新更新。

场景

案例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循环。

推荐阅读

开源地址

文章和示例代码开源在GitHub: Go语言初级、中级和高级教程[6]

公众号:coding进阶。关注公众号可以获取最新Go面试题和技术栈。

个人网站:Jincheng's Blog[7]

知乎:无忌[8]

福利

我为大家整理了一份后端开发学习资料礼包,包含编程语言入门到进阶知识(Go、C++、Python)、后端开发技术栈、面试题等。

关注公众号「coding进阶」,发送消息 backend 领取资料礼包,这份资料会不定期更新,加入我觉得有价值的资料。还可以发送消息「进群」,和同行一起交流学习,答疑解惑。

References

  • https://itnext.io/the-top-10-most-common-mistakes-ive-seen-in-go-projects-4b79d4f6cd65
  • https://github.com/jincheng9/go-tutorial/tree/main/workspace/lesson6
  • https://github.com/jincheng9/go-tutorial/tree/main/workspace/lesson7

参考资料

[1]

Teiva Harsanyi: https://teivah.medium.com/

[2]

Go十大常见错误源代码: https://github.com/jincheng9/go-tutorial/tree/main/workspace/senior/p28

[3]

Go switch使用说明: https://github.com/jincheng9/go-tutorial/tree/main/workspace/lesson6

[4]

Go for/break使用说明: https://github.com/jincheng9/go-tutorial/tree/main/workspace/lesson7

[5]

Go select语义: https://github.com/jincheng9/go-tutorial/tree/main/workspace/lesson29

[6]

Go语言初级、中级和高级教程: https://github.com/jincheng9/go-tutorial

[7]

Jincheng's Blog: https://jincheng9.github.io/

[8]

无忌: https://www.zhihu.com/people/thucuhkwuji

84260Go十大常见错误第4篇:break操作的注意事项

这个人很懒,什么都没留下

文章评论