Go 语言的 switch
语句是一种强大的多分支控制结构,比 C/C++/Java 中的 switch
更灵活,支持表达式匹配、类型断言、无表达式匹配(类似 if-else 链)等特性。下面我们详细介绍 switch
的各种用法,并附上代码示例。
一、基本 switch 语句
基本语法:
go
switch 表达式 {
case 值1:
// 执行语句
case 值2:
// 执行语句
default:
// 默认执行语句
}
示例:
go
package main
import "fmt"
func main() {
num := 2
switch num {
case 1:
fmt.Println("One")
case 2:
fmt.Println("Two")
case 3:
fmt.Println("Three")
default:
fmt.Println("Unknown")
}
}
输出:
Two
二、无表达式的 switch(类似 if-else 链)
当 switch
后面没有表达式时,相当于 switch true
,可以用来构建复杂的条件判断。
示例:
go
package main
import "fmt"
func main() {
score := 85
switch {
case score >= 90:
fmt.Println("A")
case score >= 80:
fmt.Println("B")
case score >= 70:
fmt.Println("C")
default:
fmt.Println("D")
}
}
输出:
B
三、多条件匹配
一个 case
可以匹配多个值,用逗号分隔。
示例:
go
package main
import "fmt"
func main() {
day := "Tuesday"
switch day {
case "Monday", "Tuesday", "Wednesday", "Thursday", "Friday":
fmt.Println("Weekday")
case "Saturday", "Sunday":
fmt.Println("Weekend")
default:
fmt.Println("Invalid day")
}
}
输出:
Weekday
四、fallthrough 关键字
Go 的 switch
默认不会自动"穿透"到下一个 case
,但可以使用 fallthrough
强制执行下一个 case
的代码。
示例:
go
package main
import "fmt"
func main() {
num := 1
switch num {
case 1:
fmt.Println("One")
fallthrough
case 2:
fmt.Println("Two")
default:
fmt.Println("Other")
}
}
输出:
One
Two
⚠️ 注意:fallthrough
只能用在 case
的最后一句,且会无条件执行下一个 case
,不会判断条件。
五、类型断言 switch(type switch)
Go 支持对接口变量进行类型判断,使用 switch v := x.(type)
语法。
示例:
go
package main
import "fmt"
func printType(x interface{}) {
switch v := x.(type) {
case int:
fmt.Printf("Int: %d\n", v)
case string:
fmt.Printf("String: %s\n", v)
case bool:
fmt.Printf("Bool: %t\n", v)
default:
fmt.Println("Unknown type")
}
}
func main() {
printType(42)
printType("hello")
printType(true)
printType(3.14)
}
输出:
Int: 42
String: hello
Bool: true
Unknown type
六、总结
Go 的 switch
语句具有以下特点:
- 支持表达式匹配和无表达式匹配(类似 if-else)
- 一个
case
可以匹配多个值 - 默认不穿透,除非使用
fallthrough
- 支持类型断言(
switch v := x.(type)
) - 比 C/C++ 更安全、灵活
switch
是 Go 中常用的控制结构,特别适合处理多分支逻辑,比冗长的if-else
更清晰。