golang循环跳转语句
跳转语句 goto break continue
三个语法都可以配合标签使用
标签名区分大小写,若不使用会造成编译错误
break与continue配合标签可用于多层循环的跳出
goto是调整执行位置,与其他2个语句配合标签使用的结果不同
break
func main() {
LABEL1:
for {
for i := 0; i < 10; i++ {
if i > 3 {
fmt.Println(i)
break LABEL1
}
}
}
fmt.Println("执行结束")
}
输出结果
API server listening at: 127.0.0.1:5587
4
执行结束
Process exiting with code: 0
添加LABEL1标签必须要使用
break必须配合标签使用,break后不加LABEL1标签会报错
不添加LABEL1标签break默认跳出for i := 0; i < 10; i++ {
这层循环
goto
func main() {
LABEL1:
for {
for i := 0; i < 10; i++ {
if i > 3 {
fmt.Println(i)
goto LABEL1
}
}
}
fmt.Println("执行结束")
}
输出结果
4
4
4
4
4
4
无限循环,当触发got LABEL1
标签的时候跳转到LABEL1
的位置再次触发了循环
如果你要使用goto可以把LABEL1
标签放到循环后
func main() {
for {
for i := 0; i < 10; i++ {
if i > 3 {
fmt.Println(i)
goto LABEL1
}
}
}
LABEL1:
fmt.Println("执行结束")
}
输出结果
API server listening at: 127.0.0.1:29183
4
执行结束
Process exiting with code: 0
continue
触发后跳过本次循环,继续执行下次循环
func main() {
LABEL1:
for {
for i := 0; i < 10; i++ {
if i > 3 {
fmt.Println(i)
continue LABEL1
}
}
}
fmt.Println("执行结束")
}
输出结果为无限循环
我们更改一下
func main() {
LABEL1:
for i := 0; i < 10; i++ {
for {
fmt.Println(i)
continue LABEL1
}
}
fmt.Println("执行结束")
}
输出结果
0
1
2
3
4
5
6
7
8
9
执行结束
Process exiting with code: 0
解析
func main() {
LABEL1:
for i := 0; i < 10; i++ {
for {
fmt.Println(i)
continue LABEL1
}
}
fmt.Println("执行结束")
}
将continue LABEL1
换成goto LABEL1
结果会一样吗?
func main() {
LABEL1:
for i := 0; i < 10; i++ {
for {
fmt.Println(i)
goto LABEL1
}
}
fmt.Println("执行结束")
}
输出结果为
0
0
0
0
0
0
不一样 goto 不会跳过for语句
有疑问加站长微信联系(非本文作者)