Go 语言 switch 语句


switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。。

switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加break

语法

Go 编程语言中 switch 语句的语法如下:

  1. switch var1 {
  2. case val1:
  3. ...
  4. case val2:
  5. ...
  6. default:
  7. ...
  8. }

变量 var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值。类型不被局限于常量或整数,但必须是相同的类型;或者最终结果为相同类型的表达式。

您可以同时测试多个可能符合条件的值,使用逗号分割它们,例如:case val1, val2, val3。

流程图:

实例

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. /* 定义局部变量 */
  7. var grade string = "B"
  8. var marks int = 90
  9.  
  10. switch marks {
  11. case 90: grade = "A"
  12. case 80: grade = "B"
  13. case 50,60,70 : grade = "C"
  14. default: grade = "D"
  15. }
  16.  
  17. switch {
  18. case grade == "A" :
  19. fmt.Printf("优秀!\n" )
  20. case grade == "B", grade == "C" :
  21. fmt.Printf("良好\n" )
  22. case grade == "D" :
  23. fmt.Printf("及格\n" )
  24. case grade == "F":
  25. fmt.Printf("不及格\n" )
  26. default:
  27. fmt.Printf("差\n" );
  28. }
  29. fmt.Printf("你的等级是 %s\n", grade );
  30. }

以上代码执行结果为:

  1. 优秀!
  2. 你的等级是 A

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

Type Switch 语法格式如下:

  1. switch x.(type){
  2. case type:
  3. statement(s);
  4. case type:
  5. statement(s);
  6. /* 你可以定义任意个数的case */
  7. default: /* 可选 */
  8. statement(s);
  9. }

实例

  1. package main
  2.  
  3. import "fmt"
  4.  
  5. func main() {
  6. var x interface{}
  7. switch i := x.(type) {
  8. case nil:
  9. fmt.Printf(" x 的类型 :%T",i)
  10. case int:
  11. fmt.Printf("x 是 int 型")
  12. case float64:
  13. fmt.Printf("x 是 float64 型")
  14. case func(int) float64:
  15. fmt.Printf("x 是 func(int) 型")
  16. case bool, string:
  17. fmt.Printf("x 是 bool 或 string 型" )
  18. default:
  19. fmt.Printf("未知型")
  20. }
  21. }

以上代码执行结果为:

  1. x 的类型 :<nil>