Golang中的switch语句用来处理多分支逻辑,它比传统的if else结构更清晰,而且语法上有一些自己的特点。理解这些特点能帮助你写出更地道的Go代码。

基本的值匹配switch
最常见的用法是根据一个表达式的值进入不同分支。Go的switch在匹配成功后只会执行该分支,不会自动往下穿透,因此不需要像C语言那样写break。
package main
import "fmt"
func main() {
day := 3
switch day {
case 1:
fmt.Println("星期一")
case 2:
fmt.Println("星期二")
case 3:
fmt.Println("星期三")
default:
fmt.Println("其他日子")
}
}
无表达式的switch
Go允许switch后面不写表达式,这时它相当于多个if else的替代写法,每个case里放的是一个条件判断。
package main
import "fmt"
func main() {
score := 85
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
多值匹配与fallthrough
一个case可以匹配多个值,用逗号隔开。如果确实想继续执行下一个分支,可以使用fallthrough关键字。
package main
import "fmt"
func main() {
num := 2
switch num {
case 1, 2:
fmt.Println("num是1或2")
fallthrough
case 3:
fmt.Println("紧跟着case 3的逻辑")
}
}
类型switch
在处理接口类型时,可以用switch判断其底层具体类型,这种写法在解析不确定类型的参数时非常实用。
package main
import "fmt"
func checkType(v interface{}) {
switch t := v.(type) {
case int:
fmt.Println("整数类型:", t)
case string:
fmt.Println("字符串类型:", t)
default:
fmt.Println("其他类型")
}
}
func main() {
checkType(10)
checkType("hello")
}
常见注意点
- case后面的表达式结果必须是可比较的类型,且类型要一致。
- 不需要写break,分支执行完自动退出switch。
- fallthrough会无视下一个case条件直接执行,使用时需谨慎。
掌握以上几种写法,就能在Go项目中灵活使用switch来处理各类分支逻辑了。