Golang的switch可以不用在每个case里写一个break,Golang会自动加入。
default关键字可以带,也可以不带,不是必须要有的。
首先是一个最基础的示例,在switch后面带一个变量。
func ScoreGrade1() {
gradel := "B"
switch gradel {
case "A":
fmt.Println("优秀")
case "B":
fmt.Println("良好")
case "C":
fmt.Println("中等")
case "D":
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
接着是一个switch后面不带变量的,如果没有带变量,实际switch后面是一个true,只要case后面成立即可。
func ScoreGrade2() {
score := 58.5
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("中等")
case score >= 60:
fmt.Println("及格")
default:
fmt.Println("不及格")
}
}
每个case的条件可以是一个,也可以是多个,多个条件用“,”来隔开,给出一个示例,计算某年某月有多少天。
func Days() {
year := 2008
month := 2
days := 0
switch month {
case 1, 3, 5, 7, 8, 10, 12:
days = 31
case 4, 6, 9, 11:
days = 30
case 2:
if year%4 == 0 {
days = 29
} else {
days = 28
}
default:
days = -1
}
fmt.Println("一共有:", days, "天")
}
switch的case里,有一个fallthrough的关键字,他使得case执行完以后,强制执行下面一个case。
func Fallthrough(){
num := 10
switch {
case num >= 5 :
fmt.Println("数值大于5")
fallthrough
case num >= 6 :
fmt.Println("数值大于6")
fallthrough
case num >= 7 :
fmt.Println("数值大于7")
case num >= 8 :
fmt.Println("数值大于8")
case num >= 9 :
fmt.Println("数值大于9")
}
}
原本没有fallthrough关键字,执行到数值大于5后,就结束。
加入后,将执行到数值大于7。
PS:switch在满足最上面的case后即跳转,如上一篇文章中的分数查询的判断,也必须由大至小的给出case条件