【Go】21、golang流程控制关键字break
- break语句可以结束for、switch和select的代码块
1、go语言中使用break注意事项
- 单独在select中使用break和不使用break没有啥区别
- 单独在表达式switch语句,并且没有fallthrough,使用break和不使用break没有啥区别
- 单独在表达式switch语句,并且有fallthrough,使用break能够终止fallthrough后面的case语句的执行
- 带标签的break,可以跳出多层select/switch作用域。让break更加灵活,写法更加简单灵活,不需要使用控制变量一层一层跳出循环,没有带break的只能跳出当前语句中
- break的跳转标签(label)必须放在循环语句for前面,并且在break label跳出循环不再执行for循环里的代码。break 可以用来跳出 for ,switch 或 select 语句
- 标签必须放在for、switch、select前面并且不能有其他的变量或者其他的存在,不然就报错
label_name(自定义):
for;switch;select
# label和它们三个必须紧挨着
2、go语言break关键字实例
- 跳出for循环
func f1() {
for i := 0; i < 10; i++ {
fmt.Printf("i: %v\n", i)
if i == 5 {
break // 退出整个循环
}
}
}
func main() {
f1()
}
- 跳出switch
func f2() {
i := 2
switch i {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
break
fallthrough
case 3:
fmt.Println("3")
}
}
func main() {
f2()
}
# 在case2中无法不加break输出结果是2,3;添加break后,阻止fallthrough穿透,只输出2
- 跳出标签
func f3() {
// 标签
MYLABEL:
for i := 0; i < 10; i++ {
fmt.Printf("i: %v\n", i)
if i > 5 {
break MYLABEL
}
}
}
func main() {
f3()
}
- 跳出标签2
func f4() {
// 标签1
label1:
for i := 0; i < 3; i++ {
label2:
for j := 0; j < 5; j++ {
fmt.Printf("j: %v\n", j)
if j > 3 {
break label2
}
}
fmt.Printf("i: %v\n", i)
if i == 2 {
break label1
}
}
}
func main() {
f4()
}
- 跳出标签3,这么用错误的;标签有就近原则
func f5() {
// 定义标签
label1:
for i := 0; i < 2; i++ {
fmt.Printf("i: %v\n", i)
}
for j := 0; j < 2; j++ {
break label1
}
}
func main() {
f5()
}
- 跳出标签4,跳出整个循环;跳出的不仅仅是for循环,而是这个循环
func f6() {
i := 2
label1:
switch i {
case 1:
fmt.Println("1")
case 2:
for j := 0; j <= 2; j++ {
fmt.Printf("j: %v\n", j)
break label1
}
fmt.Println("2")
case 3:
fmt.Println("3")
}
fmt.Println("ending")
}
func main() {
f6()
}
# 输出结果
j: 0
ending
- break 可以在 for,switch 或 select 语句中的任何地方退出并切换到指定 Label
本文来自博客园,作者:郭祺迦,转载请注明原文链接:https://www.cnblogs.com/guojie-guojie/p/16390295.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!