前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Go 语言中的 label 使用

Go 语言中的 label 使用

作者头像
王小明_HIT
发布2022-03-28 16:00:47
发布2022-03-28 16:00:47
81900
代码可运行
举报
文章被收录于专栏:程序员奇点程序员奇点
运行总次数:0
代码可运行

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

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

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

goto

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

代码语言:javascript
代码运行次数:0
复制
package gotocase

import (
 "fmt"
 "testing"
)

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

执行结果如下:

代码语言:javascript
代码运行次数:0
复制
=== RUN   TestGoto
1
3
--- PASS: TestGoto (0.00s)
PASS

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

看下面的例子

代码语言:javascript
代码运行次数:0
复制
func TestGoto1(t *testing.T) {
one:
 fmt.Println(1)
 goto one     //跳转
 fmt.Println(2) // 这行将会被跳过

 fmt.Println(3)
} 

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

代码语言:javascript
代码运行次数:0
复制
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

break

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

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

代码语言:javascript
代码运行次数:0
复制
func TestBreak(t *testing.T) {
OUTER:
 for {
  fmt.Println(1)
  for {
   fmt.Println(2)
   break OUTER
  }
 }
 fmt.Println(3)
}

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

执行结果

代码语言:javascript
代码运行次数:0
复制
=== RUN   TestBreak
1
2
3
--- PASS: TestBreak (0.00s)
PASS

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

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

代码语言:javascript
代码运行次数:0
复制
func TestBreak1(t *testing.T) {
 for {
  fmt.Println(1)
  for {
   fmt.Println(2)
   break OUTER
  }
 }
OUTER: 
  fmt.Println(3)
}

IDE 也会告诉你异常

continue

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

看个用例:

代码语言:javascript
代码运行次数:0
复制
func TestContinue(t *testing.T) {
 a := 10
Label:
 for a < 20 {
  if a == 15 {
   a++
   //fmt.Println(a)
   continue Label
  }
  fmt.Println(a)
  a++
 }
}

执行结果:

代码语言:javascript
代码运行次数:0
复制
=== RUN   TestContinue
10
11
12
13
14
16
17
18
19
--- PASS: TestContinue (0.00s)
PASS

参考资料

  • https://www.pianshen.com/article/56561351087/
  • 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/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • goto
  • break
  • continue
  • 参考资料
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档