文章永久连接:https://tech.souyunku.com/5356
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: 搜云库技术团队(tech.souyunku.com)
 * Copyright © 2015-2065 tech.souyunku.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: 搜云库技术团队(tech.souyunku.com)
 * Copyright © 2015-2065 tech.souyunku.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 型
干货推荐
附录:GOlang 教程:系列文章
- 一、Go 语言基础教程
- 二、Go 语言 – 简介
- 三、Go 语言环境配置
- 四、Go 语言结构
- 五、Go 语言基础语法
- 六、Go 语言数据类型
- 七、Go 语言变量
- 八、Go 语言常量
- 九、Go 语言运算符
- 十、Go 语言条件语句
- 十一、Go 语言循环语句
- 十二、Go 语言函数
- 十三、Go 语言 – 变量作用域
- 十四、Go 语言 – 数组
- 十五、Go 语言 – 字符串
- 十六、Go 语言 – 指针
- 十七、Go 语言 – 结构体
- 十八、Go 语言 – 数据类型 interface
- 十九、Go 语言 – 切片(slice)
- 二十、Go 语言 – 哈希表(map)
- 二十一、Go 语言 – range 关键字
- 二十二、Go 语言 – 关键字 delete
- 二十三、Go 语言递归函数
- 二十四、Go 语言 – 类型转换
- 二十五、Go 语言 – 错误处理
- 二十六、Go 语言 – 开发工具
- 二十七、Go 语言 for 循环语句
- 二十八、Go 语言 – 多维数组
- 二十九、Go 语言 break 语句
- 三十、Go 语言 – 指向指针的指针
- 三十一、Go 语言 – 指针作为函数参数
- 三十二、Go 语言 goto 语句
- 三十三、Go 语言 if 语句
- 三十四、Go 语言函数值传递调用
- 三十五、Go 语言 for 循环嵌套
- 三十六、Go 语言 – 向函数传递数组
- 三十七、Go 语言 – 函数 – 引用传值
- 三十八、Go 语言 select 语句
- 三十九、Go 语言 if…else 语句
- 【当前读到】四十、Go 语言 switch 语句
- 四十一、Go 语言 – 闭包函数
- 四十二、Go 语言指针数组
- 四十三、Go 语言 if 语句嵌套
- 四十四、Go 语言 – 函数作为值
- 四十五、Go 语言函数方法
- 四十六、Go 语言 continue 语句