Go 中的 switch 语句
带标签和不带标签的 switch,以及 fallthrough
Go 中的 switch 语句 是 CoddyKit 上的免费 Go Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。
switch 基础
Go 的 switch 比 C 中的更强大:默认不会贯穿执行,并且一个 case 可以包含多个值:
day := "Monday"
switch day {
case "Saturday", "Sunday":
fmt.Println("Weekend")
default:
fmt.Println("Weekday")
}不会隐式贯穿执行
在 Go 中,每个 case 的代码体都会自动结束——不同于必须显式编写 break 的 C:
- 代码更简洁,错误更少
- 只有需要类似 C 的行为时,才显式使用
fallthrough(很少需要)
带初始化语句的 switch
与 if 一样,switch 也接受可选的初始化语句:
switch os := runtime.GOOS; os {
case "linux":
fmt.Println("Linux")
case "darwin":
fmt.Println("macOS")
default:
fmt.Printf("Other: %s\n", os)
}无标签 switch(if-else 链的替代方案)
无标签 switch 的关键字后没有表达式——每个 case 都会计算一个布尔值:
score := 75
switch {
case score >= 90:
fmt.Println("A")
case score >= 80:
fmt.Println("B")
case score >= 70:
fmt.Println("C")
default:
fmt.Println("F")
}类型 switch
类型 switch 会检查接口值的动态类型:
func describe(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("int: %d\n", v)
case string:
fmt.Printf("string: %s\n", v)
default:
fmt.Printf("unknown: %T\n", v)
}
}fallthrough
使用 fallthrough 可以显式执行下一个 case 的代码体,而不论其条件如何(很少需要):
n := 1
switch n {
case 1:
fmt.Println("one")
fallthrough
case 2:
fmt.Println("one or two")
}每个 case 包含多个值
在同一个 case 中使用逗号分隔多个值:
func isVowel(c byte) bool {
switch c {
case 'a', 'e', 'i', 'o', 'u':
return true
}
return false
}switch 与 if-else
以下情况请使用 switch:
- 将一个表达式与多个值进行比较
- 需要使用类型 switch 进行接口分派
- 相比一连串的 if-else,使用 switch 可提升可读性
当条件是不同的布尔表达式时,请使用 if-else。
switch 中的 break
要提前退出 switch,请使用 break。要从 switch 内部退出外层循环,请使用带标签的 break:
loop:
for {
switch input() {
case "quit":
break loop // exits the for loop
}
}默认情况
当没有其他 case 匹配时,会执行 default case。最佳实践如下:
- 处理枚举时始终包含
default,以捕获意外值 - 将其放在末尾,以提升可读性
- 在类型 switch 中使用
default,以平稳处理不支持的类型
快速检查
在 Go 中,当 switch 的某个 case 匹配时会发生什么——执行会贯穿到后续 case 吗?
回顾:Go 中的 switch
Go 的 switch 简洁而强大:
- 不会隐式贯穿执行——请显式使用
fallthrough - 使用初始化语句限定临时变量的作用域
- 无标签 switch 可以替代 if-else 链
- 使用类型 switch 进行接口分派
- 使用逗号分隔,为每个 case 指定多个值
下一节:使用 break、continue 和标签控制循环。
常见问题解答
「Go 中的 switch 语句」课时是免费的吗?
是的 — 「Go 中的 switch 语句」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。
「Go 中的 switch 语句」这节课中我会学到什么?
带标签和不带标签的 switch,以及 fallthrough 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Go Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「Go 中的 switch 语句」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Go Academy 课中编写并运行代码吗?
能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- if 语句与初始化表达式
- for 循环:全部模式
- Go 中的 switch 语句
- break、continue 与标签