Go 语言中的label使用

Go 语言中的label使用Go 语言中有 goto 这个功能,这个功能会影响代码的可读性, 会让代码结构看起来比较乱。

大家好,欢迎来到IT知识分享网。

Go 语言中有 goto 这个功能,这个功能会影响代码的可读性, 会让代码结构看起来比较乱。

Go语言也支持label(标签)语法:分别是break labelgoto labelcontinue label

最近有次阅读代码,就看到了这样的 case , 那就说一下这个功能吧。

goto

goto 可以无条件地跳转执行的位置,但是不能跨函数,需要配合标签使用。

package gotocase import ( "fmt" "testing" ) func TestGoto(t *testing.T) { fmt.Println(1) goto three //跳转 fmt.Println(2) // 这行将会被跳过 three: fmt.Println(3) } 

执行结果如下:

=== RUN TestGoto 1 3 --- PASS: TestGoto (0.00s) PASS 

goto 标签放上面,下面都可以的.

看下面的例子

func TestGoto1(t *testing.T) { one: fmt.Println(1) goto one //跳转 fmt.Println(2) // 这行将会被跳过 fmt.Println(3) } 

执行结果, 不断循环打印。1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

break

break 一般用来跳出当前所在的循环, 但是我们有很多业务场景,需要使用到 跳出带外层循环怎么办?break label 跳出循环不再执行for循环里的代码。

可以使用 break 加标签的方式,举个例子。

func TestBreak(t *testing.T) { OUTER: for { fmt.Println(1) for { fmt.Println(2) break OUTER } } fmt.Println(3) } 

break标签只能用于for循环,不能和switch使用,在其他语言里switchbreak是搭档

执行结果

=== RUN TestBreak 1 2 3 --- PASS: TestBreak (0.00s) PASS 

这里要注意 一点 break label,break 的跳转标签(label)必须放在循环语句for前.

比如说, 下面的代码是不允许的

func TestBreak1(t *testing.T) { for { fmt.Println(1) for { fmt.Println(2) break OUTER } } OUTER: fmt.Println(3) } 

IDE 也会告诉你异常

Go 语言中的label使用

continue

continue label 这个功能和 break 优点类似,区别在于 break 是强制终止, continue 是继续循环下一个迭代。

看个用例:

func TestContinue(t *testing.T) { a := 10 Label: for a < 20 { if a == 15 { a++ //fmt.Println(a) continue Label } fmt.Println(a) a++ } } 

执行结果:

=== RUN TestContinue 10 11 12 13 14 16 17 18 19 --- PASS: TestContinue (0.00s) PASS 

欢迎关注公众号:程序员财富自由之路

在这里插入图片描述

参考资料

  • https://www.pianshen.com/article//
  • https://sherlockgy.github.io/2019/01/13/Go%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E4%B9%8B%E6%97%8512%E2%80%94%E2%80%94goto%E5%92%8C%E6%A0%87%E7%AD%BE/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/79414.html

(0)
上一篇 2024-08-21 15:26
下一篇 2024-08-21 22:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信