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