概述
相较于支流编程语言,Go 中的 switch
语法更加灵便,它承受任意模式的表达式。
语法规定
switch
前面的表达式不须要括号case
语句块执行完会主动退出整个switch
语句块,也就是不须要应用break
显式申明case
语句快执行完后,如果心愿持续向下执行,能够应用关键字fallthrough
, 这样就和其余编程语言不加break
成果一样了
switch expr { // expr 能够是任意类型 case v1: ... case v2: ... case v3: ... case v4, v5, v6: // 能够同时测试多个可能符合条件的值 ... default: // 默认值 ...}
例子
一般表达式
package mainimport "fmt"func main() { n := 1024 switch n { case 1023: fmt.Println("n = 1023") case 1024: fmt.Println("n = 1024") case 1025: fmt.Println("n = 1025") }}// $ go run main.go// 输入如下 /** n = 1024*/
运算表达式
package mainimport "fmt"func main() { n := 1024 switch n * 2 { case 1024: fmt.Println("n = 1024") case 2048: fmt.Println("n = 2048") case 0: fmt.Println("n = 0") }}// $ go run main.go// 输入如下 /** n = 2048*/
default
package mainimport "fmt"func main() { n := 1024 switch n * 2 { case 0: fmt.Println("n = 0") case 1: fmt.Println("n = 1") case 2: fmt.Println("n = 2") default: fmt.Println("n = 2048") }}// $ go run main.go// 输入如下 /** n = 2048*/
省略 expr 表达式
package mainimport "fmt"func main() { n := 1024 switch { case n < 1024: fmt.Println("n < 1024") case n > 1024: fmt.Println("n > 1024") case n == 1024: fmt.Println("n == 1024") default: fmt.Println("invalid n") }}// $ go run main.go// 输入如下 /** n = 1024*/
同时测试多个 case
package mainimport "fmt"func main() { n := 1024 switch n { case 1023, 1024: // 多个 case, 只有一个匹配就 OK fmt.Println("n <= 1024") case 1025: fmt.Println("n > 1024") default: fmt.Println("invalid n") }}// $ go run main.go// 输入如下 /** n <= 1024*/
fallthrough
package mainimport "fmt"func main() { n := 1024 switch { case n < 1024: fmt.Println("n < 1024") fallthrough // 持续向下执行 case n > 1024: fmt.Println("n > 1024") fallthrough // 持续向下执行 case n == 1024: fmt.Println("n == 1024") fallthrough // 持续向下执行 default: fmt.Println("invalid n") }}// $ go run main.go// 输入如下 /** n = 1024 invalid n*/
类型断言
switch
能够 .(type)
来实现类型断言,判断某个值是否为某个数据类型。
package mainfunc main() { var n interface{} // 值必须为 interface 类型 n = 1024 switch n.(type) { case nil: println("n is a nil") case int: println("n is a integer") case float64: println("n is a float64") case bool: println("n is a bool") case string: println("n is a string") default: println("n is invalid") }}// $ go run main.go// 输入如下 /** n is a integer*/
对于下面代码正文中提到的 interface
, 前面会讲到, 读者这里只需晓得关键字 interface
代表接口类型即可。