这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战。
Go 语言中有 goto
这个功能,这个功能会影响代码的可读性,会让代码结构看起来比较乱。但是在处理多级嵌套时又非常有用。
最近有次阅读代码,就看到了这样的 case , 那就说一下这个功能吧。
Go语言也支持label(标签)语法:分别是break label
和 goto label
、continue label
goto
goto 可以无条件的跳转执行的位置,但是不能跨函数,需要配合标签使用。
1 | go复制代码package gotocase |
执行结果如下:
1 | xml复制代码=== RUN TestGoto |
goto
标签放上面,下面都可以的.
看下面的例子
1 | go复制代码func TestGoto1(t *testing.T) { |
执行结果, 不断循环打印。1
1 | 复制代码1 |
break
break 一般用来跳出当前所在的循环, 但是我们有业务场景,需要使用到 跳出带外层循环怎么办?break label
跳出循环不再执行for循环里的代码。
可以使用 break 加标签的方式,举个例子。
1 | go复制代码func TestBreak(t *testing.T) { |
break
标签只能用于for
循环,不能和switch
使用,在其他语言里switch
与break
是搭档
执行结果
1 | diff复制代码=== RUN TestBreak |
这里要注意 一点break label,break
的跳转标签(label)必须放在循环语句for
前.
比如说, 下面的代码是不允许的
1 | go复制代码func TestBreak1(t *testing.T) { |
IDE 也会告诉你异常
continue
continue label
这个功能和 break
优点类似,区别在于 break
是强制终止, continue
是继续循环下一个迭代。
看个用例:
1 | go复制代码func TestContinue(t *testing.T) { |
执行结果:
1 | diff复制代码=== RUN TestContinue |
欢迎关注工作号:程序员财富自由之路
本文转载自: 掘金