switch条件语句
大纲
视频地址:https://www.bilibili.com/video/BV14a4y177XG?p=8
switch语句
switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止
Go的switch语句与C语言的不同点:
- 与if类似,swtich的条件也不需要用括号
()括住 - switch默认情况下case最后自带break语句,匹配成功后就不会执行其他case,如果要达到和C一样的效果,可以使用fallthrough
import "fmt"
score := "C"
switch score{
case "A":
fmt.Println("蒂花之秀")
case "B":
fmt.Println("优秀")
default:
fmt.Println("李时珍的皮")
}
// 李时珍的皮
当所有case的条件皆不成立时,default语句块被执行,相当于else
fallthrough语句
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true
import "fmt"
score := "A"
switch score{
case "A":
fmt.Println("蒂花之秀")
fallthrough
case "B":
fmt.Println("优秀")
fallthrough
default:
fmt.Println("李时珍的皮")
}
/*
蒂花之秀
优秀
李时珍的皮
*/
多条件判断
case可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3
import "fmt"
var result string
score := 50
switch score{
case 100,90:result="A"
case 80,70:result="B"
case 60:result="C"
case 50,40,30,20,10,0:result="D"
}
fmt.Println(result) // D
省略条件
没有条件的 switch 同 switch true 一样
利用省略条件的switch来代替if语句,可以使得分支更加清晰
import "fmt"
num := 0
switch{
case num>0:fmt.Println("大于0")
case num<0:fmt.Println("小于0")
default:fmt.Println("等于0")
}
switch前置语句
与if前置语句一样,switch也有前置语句,定义在swtich后,条件之前,同样用;号分隔
可以在前置内执行一个简单的语句,由这个语句定义的变量的作用域仅在switch/case/default范围内
package main
import "fmt"
func main(){
switch num:=7; num%2==0{
case true:fmt.Println(num, "偶数")
case false:fmt.Println(num, "奇数")
}
// 注意变量num的作用域只在switch/case/default内
// 下面这句会报错 undefined: num
// fmt.Println(num)
}
总结
在某些情况,使用switch语句比if语句更加优雅、清晰