跳到主要内容

40、Go 语言 switch 语句

Go语言 switch 语句 根据不同条件执行不同动作

Go语言 switch 语句 中的每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止

switch 语句执行的过程从上至下,直到找到匹配项后停止匹配

Go语言中的 switch 语句与其它语言不通,匹配项后不需要再加 break 语句

语法

Go语言 switch 语句语法格式如下

switch var1 {          
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

变量var1 可以是任何类型,而 val1 和 val2 则可以是同类型的任意值

var1 val1 val2 类型不限于常量或整数,但必须是相同的类型或者最终结果为相同类型的表达式

我们可以同时测试多个可能符合条件的值,使用逗号分割它们

switch var1 {
    case val1,val2,val3:
        ...
    case val4:
        ...
    default:
        ...
}

Go 语言 switch 语句流程图

Go语言 switch 语句执行流程如下

 

范例

/**
 * file: main.go
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
 */

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 语言范例,输出结果如下

$ go run main.go
优秀!
你的等级是 A

Type Switch ( Switch 语句类型判断)

Go语言 switch 语句还可以用来判断某个 interface 变量中实际存储的变量类型,这种语句我们称之为 Type Switch

Type Switch 语法格式如下

switch x.(type){
    case type:
       statement(s);      
    case type:
       statement(s); 
    /* 我们可以定义任意个数的case */
    default: /* 可选 */
       statement(s);
}

范例

/**
 * file: main.go
 * author: DDKK.COM 弟弟快看,程序员编程资料站(ddkk.com)
 * Copyright © 2015-2065 ddkk.com. All rights reserved.
 */

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 语言范例,输出结果如下

$ go run main.go
x 是 int 型