在go中,switch 可以支持传入各种类型进行选择,从实现上来说相当于从第1个case 到最后一个case 遍历进行比较,执行最先满足条件的case 。
并且go语言还规定必须要显式写明fallthrough 语句才会接着执行下一个case ,不用再写break 了。这样其实更合理一些,因为绝大部分情况都是这个语义的,何必再在每个case 里面写上break 呢。
func main() {
var weakDay string
fmt.Scan(&weakDay)
switch weakDay {
case "Mon.":
fmt.Println(1)
case "Tues.":
fmt.Println(2)
case "Wed.":
fmt.Println(3)
case "Thurs.":
fmt.Println(4)
case "Fri.":
fmt.Println(5)
case "Sat.":
fmt.Println(6)
case "Sun.":
fmt.Println(7)
default:
panic("wrong day")
}
}
支持一个case 里面多种情况。
func main() {
var weakDay string
fmt.Scan(&weakDay)
switch weakDay {
case "Mon.", "Tues.", "Wed.", "Thurs.", "Fri.":
fmt.Println("work day")
case "Sat.", "Sun.":
fmt.Println("weakend")
default:
panic("wrong day")
}
}
可以不传入参数,替代繁琐的if else 写法。这里每个case 挨个判断,进入最先满足条件的case 执行。
func main() {
var score int
fmt.Scan(&score)
switch {
case score < 60:
fmt.Println("不及格")
case score >= 60 && score < 80:
fmt.Println("不错")
case score >= 80:
fmt.Println("优秀")
default:
panic("wrong number")
}
}
type switch
type switch 是go语言中一种特殊的switch 语法,它比较的是类型而不是具体的值。
和普通的类型断言一样,要求进行断言的变量是接口类型的。并且在type switch 中不允许使用fallthrough 语句。
switch x.(type) {
case nil:
doSomeThing()
case Type1:
doSomeThing()
case Type2:
doSomeThing()
default:
doSomeThing()
}
为了方便进行类型转换,type switch 还可以设定一个值来提前保存转换之后得到的值。
switch value := x.(type) {
case nil:
doSomeThing()
case Type1:
doSomeThing(value)
case Type2:
doSomeThing(value)
default:
doSomeThing(value)
}
参考资料
|
请发表评论