根本用法
switch
关键字前面接条件表达式case
从上到下按程序进行匹配,直到匹配胜利- 如果没有匹配到
case
, 且有default
模式, 会执行default
的代码块
func defaultSwitch() { switch time.Now().Weekday() { case time.Saturday: fmt.Println("Today is Saturday.") case time.Sunday: fmt.Println("Today is Sunday.") default: fmt.Println("Today is a weekday.") }}
没有条件表达式
switch
关键字后没有条件表达式, 默认认为是 true
func noConditionSwitch() { hour := time.Now().Hour() switch { case hour < 12: fmt.Println("Good morning!") case hour < 17: fmt.Println("Good afternoon!") default: fmt.Println("Good evening!") }}
Or 匹配
func orSwitch() { c := '\t' var iswhiteSpace bool switch c { case ' ', '\t', '\n', '\f', '\r': iswhiteSpace = true } if iswhiteSpace { fmt.Println("c is a white_space char") }}
Fallthrough
fallthrough
语句会跳到下一个case
- 只能放在
case
代码块的最初地位
func fallthroughSwitch() { switch 2 { case 1: fmt.Println("1") fallthrough case 2: fmt.Println("2") fallthrough case 3: fmt.Println("3") }}
通过 break 退出 switch
break
语句终止 switch 继续执行- 如果要跳出外层的 for 循环,而不是
switch
,能够在循环上加一个标签,而后break
到这个标签
func breakSwitch() {Loop: for _, ch := range "a b\nc" { switch ch { case ' ': // skip space break case '\n': // break at newline break Loop default: fmt.Printf("%c\n", ch) } }}
执行程序
- switch 表达式一开始会被执行
之后 case 表达式从左到右、从上到下匹配:
- 第一个相等的 case, 会触发匹配到的代码块的执行
- 其余 case 会被疏忽
func executeOrder() { // Foo prints and returns n. var Foo func(int) int Foo = func(n int) int { fmt.Println(n) return n } switch Foo(2) { case Foo(1), Foo(2), Foo(3): fmt.Println("First case") fallthrough case Foo(4): fmt.Println("Second case") }}