1、break配合“标签”使用,可跳出标签指定的那层循环,标签名区分大小写,若不使用会造成编译错误;
func main() {
LABEL1:
for {
for i := 0; i < 10; i++ {
if i > 3 {
break LABEL1
}
fmt.Println(i)
}
}
}
// 运行结果
0
1
2
3
// 注:LABEL1和外层for循环为同一级别的
2、 goto语句和标签使用,表示将运行位置调整到标签所在的位置
func main() {
for {
for i := 0; i < 10; i++ {
if i > 3 {
goto label1
}
fmt.Println(i)
}
}
label1:
fmt.Println("over")
}
// 运行结果:
0
1
2
3
over
3、continue和“标签”配合使用,表示跳到标签指定的那层循环,继续执行
func main() {
label1:
for i := 0; i < 5; i++ {
for {
fmt.Printf("before %d\n", i)
continue label1
fmt.Sprintf("after %d", i)
}
}
fmt.Println("OK")
}
//运行结果
before 0
before 1
before 2
before 3
before 4
OK
注:continue表示调到指定的“那层循环”继续执行,所有,i := 0不再被重复执行,而是直接判断i是否小于5。如果将continue改为goto的话,表示调到“那个位置”执行,会陷入死循环。