在控制流程中,我们有时需要跳出当前循环或跳过当前步骤,甚至直接跳转到指定位置。Go 提供了三种基本跳转语句:
- •
break
:跳出当前for
、switch
或select
。 - •
continue
:跳过本轮循环,进入下一轮。 - •
goto
:无条件跳转到标签处。
一、break
—— 立即跳出循环或选择结构
1. 用于循环中
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
输出:
0
1
2
3
4
2. 用于 switch
或 select
Go 中的 switch
默认每个分支自动 break
,你可以显式使用 break
提前退出:
switch x := 2; x {
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
break
fmt.Println("不会执行")
}
二、continue
—— 跳过当前循环,进入下一轮
示例:
for i := 0; i < 5; i++ {
if i == 2 {
continue
}
fmt.Println(i)
}
输出:
0
1
3
4
注意:
i == 2
时跳过了打印。
三、goto
—— 无条件跳转
goto
用于直接跳转到代码中的标签,可用于提前退出多层嵌套等场景,但建议慎用,保持代码结构清晰。
基本用法:
i := 0
goto LABEL
i++ // 这行不会执行
LABEL:
fmt.Println("跳转到了这里")
goto
应用场景:提前跳出多层嵌套
func search() {
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 2 {
goto FOUND
}
}
}
FOUND:
fmt.Println("找到了!")
}
四、使用建议与注意事项
跳转语句 | 用途简述 | 使用建议 |
break |
退出当前循环、switch、select | 推荐用于中断循环 |
continue |
跳过当前循环 | 推荐用于跳过某些条件分支 |
goto |
无条件跳转到标签 | 慎用,避免破坏结构性逻辑 |
✅ 推荐优先使用
break
和continue
,goto
仅用于特定需求(如资源清理、错误处理)。