概述
相较于支流编程语言,Go 中的 switch
语法更加灵便,它承受任意模式的表达式。
语法规定
switch
前面的表达式不须要括号case
语句块执行完会主动退出整个switch
语句块,也就是不须要应用break
显式申明case
语句快执行完后,如果心愿持续向下执行,能够应用关键字fallthrough
, 这样就和其余编程语言不加break
成果一样了
switch expr { // expr 能够是任意类型
case v1:
...
case v2:
...
case v3:
...
case v4, v5, v6: // 能够同时测试多个可能符合条件的值
...
default: // 默认值
...
}
例子
一般表达式
package main
import "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 main
import "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 main
import "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 main
import "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 main
import "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 main
import "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 main
func 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
代表接口类型即可。