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