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