golang 跳出多重循环的高级break用法说明

平时写代码过程中难免会遇到循环嵌套的操作,这时候最头疼的就是在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()

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

(0)

相关推荐

  • golang 跳出for循环操作

    执行以下代码,发现无法跳出for循环: func SelectTest() { i := 0 for { select { case <-time.After(time.Second * time.Duration(2)): i++ if i == 5 { fmt.Println("跳出for循环") } } fmt.Println("for循环内 i=", i) } fmt.Println("for循环外") } 解决办法有两个: 1.使

  • Golang的循环中break和continue语句的用法讲解

    Go语言break语句 在Go编程语言中的break语句有以下两种用法: break语句用于在循环立即终止,程序控制继续下一个循环语句后面语句. 它可用于终止在switch语句的情况(case). 如果你正在使用嵌套循环(即,一个循环在另一个循环中),break语句将停止最内层循环的执行,并开始执行的下一行代码的程序段之后. 语法 在Go break语句的语法如下: break; 流程图: 例子: 复制代码 代码如下: package main import "fmt" func ma

  • python/golang实现循环链表的示例代码

    循环链表就是将单链表的末尾指向其头部,形成一个环.循环链表的增删操作和单链表的增删操作 区别不大.只是增加时,需要考虑空链表增加第一个节点的特殊情况:删除时需考虑删除节点是头/尾节点,和链表中只有一个节点的特殊情况. golang实现: type Node struct { value int next *Node } type Circle struct { tail *Node lenth int } // 增加节点: func (c *Circle) add(value int) { ne

  • 详解golang避免循环import问题(“import cycle not allowed”)

    前言 golang不允许循环import package ,如果检测到 import cycle ,会在编译时报错,通常import cycle是因为设计错误或包的规划问题. 以下面的例子为例,package a依赖package b,同事package b依赖package a package a import ( "fmt" "github.com/mantishK/dep/b" ) type A struct { } func (a A) PrintA() {

  • 汇编分析 Golang 循环(推荐)

    女主宣言 今天小编为大家分享一篇关于Golang循环汇编分析的文章,文章中介绍了golang循环的汇编层面的处理,通过分析,我们可以更了解循环的实现.希望能对大家有所帮助. PS:丰富的一线技术.多元化的表现形式,尽在" 3 60云计算 ",点关注哦! 循环是编程中很强大的一个概念,而且非常容易处理. 但是,必须将其翻译成机器可理解的基本指令. 它的编译方式也可能影响标准库中的其他组件. 让我们开始分析一下范围循环 . 1循环汇编 范围循环可以迭代数组,切片或通道.下面函数展示了,对分

  • golang 跳出多重循环的高级break用法说明

    平时写代码过程中难免会遇到循环嵌套的操作,这时候最头疼的就是在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.

  • javaScript如何跳出多重循环break、continue

    先来说说break和continue之间的区别 摘自JavaScript高级程序设计 for(var i=0;i<10;i++){ if(i>5){ break; } } console.log(i); ---6 •当i=5和10的时候,会执行到break,并退出循环 for(var i=1;i<10;i++){ if(i>5){ continue; } num++; } console.log(num); ---4 var num=0; for(var i=1;i<10;i

  • Java循环结构之多重循环及continue break

    目录 前言 for循环案例 continue break return 前言 含义: (1)多重循环指一个循环语句的循环体中再包含循环语句,又称嵌套循环. (2)循环语句内可以嵌套多层循环. (3)不同的循环语句可以相互嵌套. 语法格式: while循环: while(循环条件1){ 循环语句1 while(循环条件2){ 循环语句2 } } do while循环: do{ 循环体 do{ 循环体 }while(循环条件); }while(循环条件); for循环: for(表达式1;表达式2;

  • Python跳出多重循环的方法示例

    方法1:自定义异常 # -*- coding:utf-8 -*- """ 功能:python跳出循环 """ # 方法1:自定义异常 class Getoutofloop(Exception): pass try: for i in range(5): for j in range(5): if i == j == 2: raise Getoutofloop() else: print i, '----', j except Getoutoflo

  • PHP中使用break跳出多重循环代码实例

    复制代码 代码如下: $array = array(1,2,3,4,5,6);  for($i=0;$i<10;$i++){  foreach($array as $key)  {    echo $key;    if($key==2){        break 2;    }  }  }

  • Python中断多重循环的思路总结

    I. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止.跳出单循环是很简单的,比如: for i in range(10): if i > 5: print i break 然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如: for i in range(10): for j in range(10): if i+j > 5: print i,j break 这样的代码并非说找到一组 i+j > 5就停止,而是连续

  • Python中断多重循环的几种方式详解

    这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 I. 跳出单循环 不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止.跳出单循环是很简单的,比如 for i in range(10): if i > 5: print i break 然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如 for i in range(10): for

  • Java如何跳出当前多重循环你知道吗

    目录 Java是如何跳出当前多重循环? 不建议使用 建议使用 总结 Java是如何跳出当前多重循环? 不建议使用 在最外层前面加一个标记A,然后用break A;可以跳出多重循环因为它不会让你的程序变得更加优雅,很多时候起到相反的作用.例如,万一别人把这个标识符定义在你找不到的地方,容易让代码阅读起来很费解. (Java中支持带标签的break和continue语句,作用有点类似于C和C++的goto语句) 在多层循环体外写 标识符A: 来跳出循环. 代码如下: public static vo

  • Python循环语句之break与continue的用法

    Python break 语句 Python break语句,就像在C语言中,打破了最小封闭for或while循环. break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句. break语句用在while和for循环中. 如果您使用嵌套循环,break语句将停止执行最深层的循环,并开始执行下一行代码. Python语言 break 语句语法: break 流程图: 实例: #!/usr/bin/python for letter in 'Pyt

  • javacript使用break内层跳出外层循环分析

    本文实例分析了javacript使用break内层跳出外层循环的用法.分享给大家供大家参考.具体分析如下: 与php不同,javascript中循环跳出break,需要添加额外的标签.以"百钱买百鸡"为例(搜索张丘建,百钱买百鸡).如果需要算出全部,则是下面的代码: 复制代码 代码如下: <html> <head> </head> <body> <script type="text/javascript">

随机推荐