我是靠谱客的博主 风中斑马,这篇文章主要介绍golang 跳出多重循环的高级break用法说明,现在分享给大家,希望可以做个参考。

平时写代码过程中难免会遇到循环嵌套的操作,这时候最头疼的就是在break的时候需要一层一层的退出或者使用goto语句,golang有一种和goto方式类似但是goto方式更友好并且更易读的高级break用法,就是在循环外使用label标记退出哪一层循环的方式。

示例代码:

复制代码
1
2
3
4
5
6
7
8
9
10
I: for i := 0; i < 2; i++ { for j := 0; j < 5; j++ { if j == 2 { break I } fmt.Println("hello") } fmt.Println("hi") }

程序的运行结果:

hello

hello

补充:golang for的select体中如何break外层循环

问题

默认在select中break是只跳脱了select体,而不是结束for循环

复制代码
1
2
3
4
5
6
7
8
9
for { select{ case <-tick.C: //do someting case <- stop: break //break的不是for循环, 而是跳脱select,执行doNext() } doNext() }

如何在for的select体中break到外层循环呢?

1.解决办法

1.1 使用带标签的break

复制代码
1
2
3
4
5
6
7
8
9
10
LOOP: for { select{ case <-tick.C: //do someting case <- stop: break LOOP//break的for循环,跳转执行doOther() } doNext() } doOther()

等价于C的goto,但是又不同。比如这里for循环前的标签,对于如果使用goto LOOP会导致再次执行循环。但是golang的break到这里是跳出循环,执行循环之后的操作

1.2 使用return

复制代码
1
2
3
4
5
6
7
8
9
10
for { select{ case <-tick.C: //do someting case <- stop: return //干净利落,适合退出goroutin的场景 } doNext() } doOther()

1.3 使用标志

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
isStop := false for { select{ case <-tick.C: //do someting case <- stop: isStop = true//干净利落,适合退出goroutin的场景 break } if isStop { break } doNext() } doOther()

以上为个人经验,希望能给大家一个参考,也希望大家多多支持靠谱客。如有错误或未考虑完全的地方,望不吝赐教。

最后

以上就是风中斑马最近收集整理的关于golang 跳出多重循环的高级break用法说明的全部内容,更多相关golang内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(106)

评论列表共有 0 条评论

立即
投稿
返回
顶部