首页 > 编程笔记

Go语言switch case语句的用法

在Go语言中,多条件分支是由 switch case 语句实现的,它根据某个变量值进行条件选择,并执行相应代码。下图是 switch case 语句的执行过程。

switch case 语句的执行过程
图2:switch case 语句的执行过程

从图2了解到 switch case 语句的具体执行过程,它根据某个变量值进行选择,case 语句是设置变量的区间值,只要变量符合其中某个 case 的区间值,程序就会自动执行相应的代码,如果所有 case 的区间值都不符合,则执行 default 的代码。

switch case 语句的语法格式如下:
switch 变量 {
   case 值1:
        执行语句1
   case 值2:
        执行语句2
   default:
        执行语句N
   }

switch {
   case 变量的条件判断1:
        执行语句1
   case 变量的条件判断2:
        执行语句2
   default:
        执行语句N
}

switch 定义变量; 变量{
   case 变量的条件判断1:
        执行语句1
   case 变量的条件判断2:
        执行语句2
   default:
        执行语句N
}
switch case 语句的语法格式说明如下:
程序在执行 switch 语句的时候,case 语句都是从上至下按顺序执行的,所以每个 case 的判断条件建议不要重合,不然很容易造成逻辑上的混乱。

根据 switch 的语法格式分别列举应用例子,代码如下:
package main

import (
   "fmt"
   "math/rand"
   "time"
)

func main() {
   // 使用方法1
   finger := 3
   switch finger {
        // 当变量finger=1的时候
        case 1:
             fmt.Println("大拇指")
        // 当变量finger=2的时候
        case 2:
             fmt.Println("食指")
        // 当变量finger=3的时候
        case 3:
             fmt.Println("中指")
        case 4:
             fmt.Println("无名指")
        case 5:
             fmt.Println("小拇指")
        default:
             fmt.Println("无效的输入!")
   }

   // 使用方法2
   rand.Seed(time.Now().Unix())
   num := rand.Intn(100)
   switch {
        // 判断num是否大于20
        case num < 20:
             fmt.Printf("变量num的值为:%v,小于20\n", num)
        default:
             fmt.Printf("变量num的值为:%v,大于20\n", num)
   }

   // 使用方法3
   rand.Seed(time.Now().Unix())
   switch n := rand.Intn(9); n {
        // 变量n在(1, 3, 5, 7, 9)区间内
        case 1, 3, 5, 7, 9:
             fmt.Printf("奇数,值为:%v,小于20\n", n)
        // 变量n在(2, 4, 6, 8)区间内
        case 2, 4, 6, 8:
             fmt.Printf("偶数,值为:%v,小于20\n", n)
        default:
             fmt.Printf("啥也不是")
     }
}
上述代码列举了 switch case 语句的3种使用方式,虽然在语法格式上存在细微差异,但整体上没有太大差异,总的来说:
运行上述代码,运行结果如图3所示。

示例1运行结果
图3:示例1运行结果

默认情况下,当程序执行了某个 case 语句之后,它不再往下执行其他 case 语句,若想程序继续执行下一个 case 语句,可以在 case 语句中加入关键字 fallthrough,示例如下:
package main

import "fmt"

func main() {
   finger := 1
   switch finger {
   // 当变量finger=1的时候
   case 1:
        fmt.Println("大拇指")
        fallthrough
   // 当变量finger=2的时候
   case 2:
        fmt.Println("食指")
        fallthrough
   // 当变量finger=3的时候
   case 3:
        fmt.Println("中指")
   case 4:
        fmt.Println("无名指")
   case 5:
        fmt.Println("小拇指")
   default:
        fmt.Println("无效的输入!")
   }
}
运行上述代码,运行结果如图4所示。

示例2运行结果
图4:示例2运行结果

从运行结果看到,程序首先执行 case 1 的代码,由于 case 1 的代码设置了关键字 fallthrough,程序继续执行 case 2 的代码;case 2 的代码也设置了关键字 fallthrough,所以程序继续执行 case 3 的代码,以此类推,直到执行关键字 default 的代码为止。

上述代码的 case 3 没有写入关键字 fallthrough,所以执行完 case 3 的代码后,程序就跳出整个 switch 语句。

推荐阅读