switch 语句专门用来设计多分支条件结构。与 else/if 多分支结构相比,switch 结构更简洁,执行效率更高。
switch var1 {
case val1:
...
case val2:
...
default:
...
}
switch {
case condition1:
...
case condition2:
...
default:
...
}
switch 语句的第二种形式是不提供任何被判断的值(实际上默认为判断是否为 true),然后在每个 case 分支中进行测试不同的条件。当任一分支的测试结果为 true 时,该分支的代码会被执行。
switch 语句的第三种形式是包含一个初始化语句:
switch initialization {
case val1:
...
case val2:
...
default:
...
}
switch result := calculate(); {
case result < 0:
...
case result > 0:
...
default:
// 0
}
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。前花括号 { 必须和 switch 关键字在同一行。
您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1,val2,val3。 一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个 switch 代码块,也就是说您不需要特别使用 break 语句来表示结束。
如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough 关键字来达到目的。
fallthrough强制执行后面的case代码,fallthrough不会判断下一条case的expr结果是否为true。
package main
import "fmt"
func main() {
switch a := 1; {
case a == 1:
fmt.Println("The integer was == 1")
fallthrough
case a == 2:
fmt.Println("The integer was == 2")
case a == 3:
fmt.Println("The integer was == 3")
fallthrough
case a == 4:
fmt.Println("The integer was == 4")
case a == 5:
fmt.Println("The integer was == 5")
fallthrough
default:
fmt.Println("default case")
}
}
程序输出:
The integer was == 1
The integer was == 2
下一节:select是Go语言中的一个控制结构,类似于switch语句,主要用于处理异步通道操作,所有情况都会涉及通信操作。