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

示例代码:

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循环

for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  break //break的不是for循环, 而是跳脱select,执行doNext()
 }
 doNext()
}

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

1.解决办法

1.1 使用带标签的break

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

for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  return //干净利落,适合退出goroutin的场景
 }
 doNext()
}
doOther()

1.3 使用标志

isStop := false
for {
 select{
 case <-tick.C:
  //do someting
 case <- stop:
  isStop = true//干净利落,适合退出goroutin的场景
  break
 }
 if isStop {
 break
 }
 doNext()
}
doOther()

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

标签:
golang,跳出多重循环,break

免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
评论“golang 跳出多重循环的高级break用法说明”
暂无“golang 跳出多重循环的高级break用法说明”评论...

RTX 5090要首发 性能要翻倍!三星展示GDDR7显存

三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。

首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。

据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。