Go 语言笔记:选择语句
选择语句
Go 语言中的选择语句也是通过 switch 和 case 关键字来实现的。
go
// 写法1
expression := ""
switch expression {
case expression1:
...
case expression2:
...
default:
...
}
// 写法2,expression 的作用域在 switch 内
switch expression := ""; expression {
}与 Java 不同的是这里不需要在每个 case 语句执行的代码结尾添加 break 。
多值 case 以及 default 可选
case 选项不允许出现重复的值,但是 case 后面可以带多个值,以逗号隔开;另外 default 是可选的;因为 case 不允许出现重复的值,那么只要遇见一个 case 匹配上,那么则终止选择。
go
season := "winter"
switch season {
case "winter":
fmt.Println("寒冷")
case "summer":
fmt.Println("炎热")
case "spring":
fmt.Println("风和日丽")
default:
fmt.Println("秋高气爽")
}
switch season {
case "winter":
fmt.Println("日照短暂")
case "summer", "spring", "autumn":
fmt.Println("日照充足")
}无条件表达式的 switch
如果 switch 后没有条件表达式,那么则认为是 switch true 的情形,此时可以认为相当于是条件语句的变种。
go
season := "winter"
switch {
case season == "winter":
fmt.Println("yes")
case season == "summer":
fmt.Println("no")
}switch 后可跟函数
switch 后面可以是一个函数,要求 case 的值类型与函数的返回值一致即可。
go
func getSeason(month int) string {
if month > 3 && month < 7 {
return "summer"
}
return "other"
}
func main() {
switch getSeason(5) {
case "summer":
fmt.Println("夏天")
default:
fmt.Println("other")
}
}fallthrough 穿透
通常情况下,只要遇见一个 case 满足条件,则直接退出整个 switch ,但是 fallthrough 关键字可以允许你穿透本次匹配的 case 块,执行下一个分支的代码块,即使其条件并不匹配。fallthrough 后面必须还有其他分支 case 活着 default。
go
season := "winter"
switch {
case season == "winter":
fmt.Println("yes")
fallthrough
case season == "summer":
fmt.Println("no")
}
// 打印结果
yes
no