四十、Go 语言 switch 语句
云少四十、Go 语言 switch 语句
Go 语言 switch 语句 根据不同条件执行不同动作
Go 语言 switch 语句 中的每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止
switch 语句执行的过程从上至下,直到找到匹配项后停止匹配
Go 语言中的 switch 语句与其它语言不通,匹配项后不需要再加 break 语句
语法
Go 语言 switch 语句语法格式如下
1 2 3 4 5 6 7 8
| switch var1 { case val1: ... case val2: ... default: ... }
|
变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值
var1 val1 val2 类型不限于常量或整数,但必须是相同的类型或者最终结果为相同类型的表达式
我们可以同时测试多个可能符合条件的值,使用逗号分割它们
1 2 3 4 5 6 7 8
| switch var1 { case val1,val2,val3: ... case val4: ... default: ... }
|
范例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| package main
import "fmt"
func main() { var grade string = "B" var marks int = 90
switch marks { case 90: grade = "A" case 80: grade = "B" case 50,60,70 : grade = "C" default: grade = "D" }
switch { case grade == "A" : fmt.Printf("优秀!\n" ) case grade == "B", grade == "C" : fmt.Printf("良好\n" ) case grade == "D" : fmt.Printf("及格\n" ) case grade == "F": fmt.Printf("不及格\n" ) default: fmt.Printf("差\n" ); } fmt.Printf("你的等级是 %s\n", grade ); }
|
编译运行以上 Go 语言范例,输出结果如下
1 2 3
| $ go run main.go 优秀! 你的等级是 A
|
Type Switch ( Switch 语句类型判断)
Go 语言 switch 语句还可以用来判断某个 interface 变量中实际存储的变量类型,这种语句我们称之为 Type Switch
Type Switch 语法格式如下
1 2 3 4 5 6 7 8 9
| switch x.(type){ case type: statement(s); case type: statement(s); default: statement(s); }
|
范例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package main
import "fmt"
func main() { var x = 13
switch i := x.(type) { case nil: fmt.Printf(" x 的类型 :%T",i) case int: fmt.Printf("x 是 int 型") case float64: fmt.Printf("x 是 float64 型") case func(int) float64: fmt.Printf("x 是 func(int) 型") case bool, string: fmt.Printf("x 是 bool 或 string 型" ) default: fmt.Printf("未知型") } }
|
编译运行以上 Go 语言范例,输出结果如下
1 2
| $ go run main.go x 是 int 型
|