golang中的 break label, goto label,continue label,break如何跳出多层循环
golang中的 break label, goto label,continue label,break如何跳出多层循环
·
goto label
goto 可以无条件的跳转执行的位置,但是不能跨函数。
label 不是代码块,可以理解为它是一个 position,直接跳到这个 position 然后接着向下运行。
func worker4() {
fmt.Println(1)
goto label
fmt.Println(2)
label:
fmt.Println(3)
}
输出
1
3
func worker5() {
label:
fmt.Println(1)
time.Sleep(time.Second)
goto label
fmt.Println(2)
fmt.Println(3)
}
将会无限输出 1
break label
break 只能跳出当前循环,而 break label 可以跳出多层循环,它要配合 for 循环使用,而不能用在 switch 。
label 下面要紧跟 for 语句,中间不能有其他代码。所以,break label 就是跳出 label 下面的那个 for 循环。
func worker6() {
for x := 1; x < 10; x++ {
label:
// fmt.Println("inter") // 此处不能有代码
for i := 1; i < 10; i++ {
for j := 1; j < 10; j++ {
sum := i + j
fmt.Println(sum)
if sum == 3 {
break label
}
}
}
fmt.Println("out1")
}
fmt.Println("out2")
}
continue label
continue label 这个功能和 break 有点类似,区别在于 break 是强制终止, continue 是跳出来继续循环。
func worker7() {
label:
for i := 1; i < 3; i++ {
for j := 1; j < 3; j++ {
sum := i + j
fmt.Println(sum)
if sum >= 3 {
continue label
}
fmt.Println("after")
}
}
fmt.Println("out1")
}
2
after
3
3
out1
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)