【go】switch用法梳理与总结
Go 语言的 switch
语句是一种强大的多分支控制结构,比 C/C++/Java 中的 switch
更灵活,支持表达式匹配、类型断言、无表达式匹配(类似 if-else 链)等特性。下面我们详细介绍 switch
的各种用法,并附上代码示例。
一、基本 switch 语句
基本语法:
switch 表达式 {
case 值1:// 执行语句
case 值2:// 执行语句
default:// 默认执行语句
}
示例:
package main
import "fmt"
func main() {num := 2switch 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
,可以用来构建复杂的条件判断。
示例:
package main
import "fmt"
func main() {score := 85switch {case score >= 90:fmt.Println("A")case score >= 80:fmt.Println("B")case score >= 70:fmt.Println("C")default:fmt.Println("D")}
}
输出:
B
三、多条件匹配
一个 case
可以匹配多个值,用逗号分隔。
示例:
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
的代码。
示例:
package main
import "fmt"
func main() {num := 1switch num {case 1:fmt.Println("One")fallthroughcase 2:fmt.Println("Two")default:fmt.Println("Other")}
}
输出:
One
Two
⚠️ 注意:fallthrough
只能用在 case
的最后一句,且会无条件执行下一个 case
,不会判断条件。
五、类型断言 switch(type switch)
Go 支持对接口变量进行类型判断,使用 switch v := x.(type)
语法。
示例:
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
更清晰。