break 立即退出当前循环,常用于搜索到目标后终止遍历或配合 if 提前中断;支持带标签跳出外层循环。continue 跳过本次迭代,直接进入下一次循环。

在 Go 语言中,break 和 continue 是控制循环流程的关键语句,它们不改变循环条件本身,而是直接干预当前循环的执行路径。
break:立即退出当前循环
break 用于提前终止最内层的 for、switch 或 select 语句。在循环中遇到 break,程序会立刻跳出该循环体,继续执行循环之后的代码。
常见用法示例:
- 搜索到目标值后立即退出遍历,避免无谓迭代
- 配合
if判断,在满足特定条件时中断循环 - 支持带标签的
break,可跳出外层循环(见下文)
基础示例:
立即学习“go语言免费学习笔记(深入)”;
for i := 0; i < 10; i++ {
if i == 5 {
break // 循环在 i=5 时不执行后续,直接结束
}
fmt.Println(i) // 输出 0 1 2 3 4
}
continue:跳过本次迭代,进入下一次循环
continue 用于跳过当前循环体剩余部分,直接进入下一轮循环判断(即执行更新语句,再检查循环条件)。
适用场景包括:
- 过滤掉不符合条件的元素,只处理有效数据
- 简化嵌套
if结构,让主逻辑更清晰 - 避免在循环体内写大量 else 分支
示例:
for i := 0; i < 6; i++ {
if i%2 == 0 {
continue // 跳过偶数,不打印
}
fmt.Println(i) // 输出 1 3 5
}
带标签的 break 和 continue:精准控制多层循环
Go 支持给循环加标签(label),配合 break label 或 continue 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 内部 - 过度使用标签会降低可读性,建议仅在必要嵌套场景下使用










