switch
switch语句基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。
switch语句由上往下执行,直到找到匹配项,匹配项后面也不需要再加 break。
switch默认情况下case最后自带break语句,匹配成功后就不会执行其他case,如需执行后面的case,可以使用fallthrough。
default不论放在哪都是最后执行。语法如下:
switch var1 {
case val1:
...
case val2:
...
default:
...
}
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。
可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。
switch{
case 1,2,3,4:
default:
}
示例:
package main
import "fmt"
func main() {
grade := "B"
marks := 90
switch marks {
case 90:
grade = "A"
case 80:
grade = "B"
case 70, 60:
grade = "C"
default:
grade = "D"
}
switch {
case grade == "A":
fmt.Printf("优秀!\n")
case grade == "B", grade == "C":
fmt.Printf("及格\n")
default:
fmt.Printf("不及格\n")
}
fmt.Printf("你的等级是 %s\n", grade)
}
使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。
package main
import "fmt"
func main() {
switch {
case false:
fmt.Println("1、case 条件语句为 false")
fallthrough
case true:
fmt.Println("2、case 条件语句为 true")
fallthrough
case false:
fmt.Println("3、case 条件语句为 false")
fallthrough
case true:
fmt.Println("4、case 条件语句为 true")
case false:
fmt.Println("5、case 条件语句为 false")
fallthrough
default:
fmt.Println("6、默认 case")
}
}
switch 从第一个判断表达式为 true 的 case 开始执行,如果 case 带有 fallthrough,程序会继续执行下一条 case,且它不会去判断下一个 case 的表达式是否为 true。
练习:
package main
import "fmt"
func main() {
var yes string
fmt.Print("有卖西瓜的吗?(Y/N)")
fmt.Scan(&yes)
fmt.Println("老婆的想法:")
fmt.Println("十个包子")
switch yes {
case "y", "Y":
fmt.Println("买一个西瓜")
}
fmt.Println("老公的想法:")
switch yes {
case "y", "Y":
fmt.Println("一个包子")
default:
fmt.Println("十个包子")
}
var score int
fmt.Print("请输入成绩: ")
fmt.Scan(&score)
switch {
case score >= 90:
fmt.Println("A")
case score >= 80:
fmt.Println("B")
case score >= 70:
fmt.Println("C")
case score >= 60:
fmt.Println("D")
default:
fmt.Println("E")
}
}