• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    golang 跳出多重循环的高级break用法说明
    POST TIME:2021-10-18 17:19

    平时写代码过程中难免会遇到循环嵌套的操作,这时候最头疼的就是在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和continue语句的用法讲解
    • golang 跳出for循环操作
    • python/golang实现循环链表的示例代码
    • 汇编分析 Golang 循环(推荐)
    • 详解golang避免循环import问题(“import cycle not allowed”)
    上一篇:golang http请求封装代码
    下一篇:golang return省略用法说明
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信