break 立即退出当前循环,常用于搜索到目标后终止遍历或配合 if 提前中断;支持带标签跳出外层循环。continue 跳过本次迭代,直接进入下一次循环。
在 Go 语言中,break 和 continue 是控制循环流程的关键语句,它们不改变循环条件本身,而是直接干预当前循环的执行路径。
break 用于提前终止最内层的 for、switch 或 select 语句。在循环中遇到 break,程序会立刻跳出该循环体,继续执行循环之后的代码。
常见用法示例:
if 判断,在满足特定条件时中断循环break,可跳出外层循环(见下文)基础示例:
for i := 0; i < 10; i++ {
if i == 5 {
break // 循环在 i=5 时不执行后续,直接结束
}
fmt.Println(i) // 输出 0 1 2 3 4
}
continue 用于跳过当前循环体剩余部分,直接进入下一轮循环判断(即执行更新语句,再检查循环条件)。
适用场景包括:
if 结构,让主逻辑更清晰示例:
for i := 0; i < 6; i++ {
if i%2 == 0 {
continue // 跳过偶数,不打印
}
fmt.Println(i) // 输出 1 3 5
}
Go 支持给循环加标签(label),配合 break label 或 continu 可跳出或跳转到指定层级的循环,解决嵌套循环中的控制难题。
e label
注意点:
break Outer 会完全退出被标记的循环;continue Outer 会跳到该循环的下一次迭代开始处示例(查找二维切片中第一个负数):
Outer:
for i := 0; i < len(matrix); i++ {
for j := 0; j < len(matrix[i]); j++ {
if matrix[i][j] < 0 {
fmt.Printf("Found negative at [%d][%d]\n", i, j)
break Outer // 直接退出两层循环
}
}
}
实际编码中容易忽略的细节:
break 在 switch 中默认只跳出当前 switch,不是外部 for —— 若想同时跳出,需加标签continue 在 for 中会先执行更新语句(如 i++),再判断条件;但在 for ; ; 无限循环中,必须手动更新变量,否则可能死循环if 外部单独写 break 或 continue,它们只能出现在循环或 switch 内部