在控制流程中,我们有时需要跳出当前循环 或跳过当前步骤 ,甚至直接跳转到指定位置。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仅用于特定需求(如资源清理、错误处理)。