-
带标签的 continue:
直接跳到标签所标记的最外层循环的下一个迭代,忽略当前迭代剩余的代码。
-
带标签的 break:
直接跳出标签所标记的最外层循环,继续执行该循环之后的代码。
-
goto 关键字
goto
可以无条件地跳转到程序中指定的标签处。在这种情况下,可以使用任意标签,不仅限于循环。
代码范例:
rowLoop: // 这是外层循环的标签
for i, row := range array { // 外层循环
for j, value := range row { // 内层循环
if value <= threshold {
continue rowLoop
}
fmt.Printf("Found: row %d, col %d\n", i, j)
return
}
}
// 输出:
// Row 0 start
// Row 0, Col 0
// Row 1 start
// Row 1, Col 0
// Row 2 start
// Row 2, Col 0
rowLoop: // 这是外层循环的标签
for i := 0; i < 3; i++ { // 外层循环
fmt.Printf("Row %d start\n", i)
for j := 0; j < 3; j++ { // 内层循环
if j == 1 {
break rowLoop
}
fmt.Printf("Row %d, Col %d\n", i, j)
}
fmt.Printf("Row %d end\n", i)
}
// 输出:
// Row 0 start
// Row 0, Col 0
for i := 0; i < 3; i++ { // 外层循环
fmt.Printf("Row %d start\n", i)
for j := 0; j < 3; j++ { // 内层循环
if j == 1 {
goto end
}
fmt.Printf("Row %d, Col %d\n", i, j)
}
fmt.Printf("Row %d end\n", i)
}
end: // 这是goto标签
fmt.Println("Reached end label")
// 输出:
// Row 0 start
// Row 0, Col 0
// Reached end label