首页 > 编程笔记 > Go语言笔记 阅读:13

Go语言switch语句的用法(非常详细,附带实例)

Go 语言中的条件判断语句主要包括两种,第一种是 if 语句,第二种是 switch 语句。

switch 是典型的多条件分支语句,与 if else if else 语句基本相同,但 switch 语句比 if else if else 语句更具有可读性,它可以根据一个变量的值选择不同的分支执行。switch 语句允许在找不到匹配条件时执行一组默认语句。

switch 语句有 3 种使用形式,语法格式分别如下:
//形式1
switch 变量 {
    case 值1:
        语句1
    case 值2:
        语句2
    ...
    default:
        语句n
}

//形式2
switch 定义变量; 变量 {
    case 值1:
        语句1
    case 值2:
        语句2
    ...
    default:
        语句n
}

//形式3
switch {
    case 表达式1:
        语句1
    case 表达式2:
        语句2
    ...
    default:
        语句n
}
语法格式说明如下:
switch 关键字后设置了变量的执行流程如下图所示:


图 1 switch关键字后设置了变量的执行流程

switch 关键字后面未设置变量的执行流程如下图所示:


图 2 switch关键字后面未设置变量的执行流程

switch 语句比较常见的应用是从多个 case 中找到和变量匹配的值,从而执行对应的语句。下面通过示例来了解 switch 语句几种不同形式的用法。

【实例 1】输出贴心提醒警句。将“今天是星期几”定义在变量中,根据“今天是星期几”输出不同的贴心提醒警句。代码如下:
package main

import "fmt"

func main(){
    weekday := "星期六"
    switch weekday {
    case "星期一":
        fmt.Println("今天是星期一,新的一周开始了。")
    case "星期二":
        fmt.Println("今天是星期二,保持昨天的好状态,继续努力!")
    case "星期三":
        fmt.Println("今天是星期三,真快啊,过去1/2周了。")
    case "星期四":
        fmt.Println("今天是星期四,继续加油!")
    case "星期五":
        fmt.Println("今天是星期五,好好想想明天去哪里玩。")
    default:
        fmt.Println("今天是周末,可以好好放松一下了。")
    }
}
运行结果如下:

今天是周末,可以好好放松一下了。

相对于其他一些语言来说,Go 语言中的 switch 语句结构更加灵活,语法设计也是以方便为主。使用 switch 语句匹配变量的值,还可以将变量的赋值操作定义在 switch 关键字后面。

在例 1 中,将变量的赋值放在 switch 关键字后面,将代码中的“switch weekday”修改为“switch weekday := "星期六";weekday”即可。

在设置变量的匹配项时,还可以在 case 后面设置多个值,多个值之间用逗号分隔。

【实例 2】判断当前季节。使用 switch 语句判断当前月份属于哪个季节,代码如下:
package main

import "fmt"

func main(){
    month := 9
    fmt.Println("现在是", month, "月")
    switch month {
    case 1, 2, 3:
        fmt.Printf("当前月份属于春季")
    case 4, 5, 6:
        fmt.Printf("当前月份属于夏季")
    case 7, 8, 9:
        fmt.Printf("当前月份属于秋季")
    default:
        fmt.Printf("当前月份属于冬季")
    }
}
运行结果如下:

现在是 9 月
当前月份属于秋季


当 switch 关键字后未设置变量时,case 后面必须是一个包含运算符的表达式,用于对已经声明的变量进行条件判断。

【实例 3】输出考试成绩对应的等级。将某学校的学生成绩转化为不同等级,划分标准如下:
假设某学生的考试成绩是 66 分,输出该成绩对应的等级。代码如下:
package main

import "fmt"

func main(){
    score := 66
    switch {
    case score >= 90:
        fmt.Printf("考试成绩等级:优秀")
    case score >= 75:
        fmt.Printf("考试成绩等级:良好")
    case score >= 60:
        fmt.Printf("考试成绩等级:及格")
    default:
        fmt.Printf("考试成绩等级:不及格")
    }
}
运行结果如下:

考试成绩等级:及格


在默认情况下,当程序执行某个 case 语句之后,不会再向下执行其他 case 语句,而是直接跳出整个 switch 语句。要想继续执行下一个 case 语句,可以在 case 语句中加入 fallthrough 关键字。

示例代码如下:
package main

import "fmt"

func main(){
    num := 20
    switch num {
    case 10:
        fmt.Println("10")
        fallthrough
    case 20:
        fmt.Println("20")
        fallthrough
    case 30:
        fmt.Println("30")
    default:
        fmt.Println("其他值")
    }
}
运行结果如下:

20
30

从运行结果可以看出,switch 从第一个匹配的 case 语句开始执行,如果 case 语句中设置了 fallthrough,则程序会继续执行下一条 case,而且不会判断下一个 case 后面的值是否匹配。

相关文章