Go switch case语句的用法
在Go语言中,switch 表示选择语句的关键字,switch 语句会根据初始化表达式得出一个值,然后根据 case 语句的条件,执行相应的代码块,最终返回特定内容。每个 case 被称为一种情况,只有当初始化语句的值符合 case 的条件语句时,case 才会被执行。
如果没有遇到符合的 case,则可以使用默认的 case (default case),如果已经遇到了符合的 case,那么后面的 case都不会被执行。
Go语言 switch case 语句的语法格式如下:
如果前面的 case 都未匹配,则与 default 进行匹配。
switch case 语句的执行流程如图1所示。

图1:Go switch case 语句的执行流程
Go语言改进了 switch 的语法设计,case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行,例如:
1
在以上代码中,每个 case 均是字符串格式,且使用了 default 分支,Go语言规定每个 switch 只能有一个 default 分支。
与其他编程语言不同的是,在Go语言编程中,switch 有两种类型:
这里是int,x的类型是%T 1
switch case 的特点如下:
如果没有遇到符合的 case,则可以使用默认的 case (default case),如果已经遇到了符合的 case,那么后面的 case都不会被执行。
Go语言 switch case 语句的语法格式如下:
switch (表达式) //表达式的值是已知的
{
case 常数1:
代码块1;
case 常数2:
代码块2;
…
default:
代码块n+1;
}
switch case 语句执行时,会用该表达式的值依次与各个 case 后的常数去对比,试图找到第一个匹配项,找到匹配的项后,就去执行该 case 对应的代码块,如果没找到则继续执行下一个 case,直到 default 为止。如果前面的 case 都未匹配,则与 default 进行匹配。
switch case 语句的执行流程如图1所示。

图1:Go switch case 语句的执行流程
Go语言改进了 switch 的语法设计,case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行,例如:
var a = "hello"
switch a {
case "hello":
fmt.Println(1)
case "world":
fmt.Println(2)
default:
fmt.Println(0)
}
输出结果如下:1
在以上代码中,每个 case 均是字符串格式,且使用了 default 分支,Go语言规定每个 switch 只能有一个 default 分支。
与其他编程语言不同的是,在Go语言编程中,switch 有两种类型:
- 表达式 switch:在表达式 switch 中,case 包含与 switch 表达式的值进行比较的表达式。
- 类型 switch:在类型 switch 中,case 包含与特殊注释的 switch 表达式的类型进行比较的类型。
1) 表达式 switch
也就是常见的 switch case 的用法,请看下面的代码:
package main
import "fmt"
func main() {
grade := "E"
marks := 95
switch {
case marks >= 90:
grade = "A"
case marks >= 80:
grade = "B"
case marks >= 70:
grade = "C"
case marks >= 60:
grade = "D"
default:
grade = "E"
}
switch {
case grade == "A":
fmt.Println("成绩优秀!\n")
case grade == "B":
fmt.Println("表现良好!\n")
case grade == "C", grade == "D":
fmt.Println("再接再厉!\n")
default:
fmt.Println("成绩不合格!\n")
}
fmt.Println("你的成绩为", grade)
}
运行结果:
成绩优秀!
你的成绩为 A
2) 类型 switch
类型 switch 语句针对变量的类型判断该执行哪个 case 代码块,例如:
package main
import "fmt"
var x interface{} //空接口
func main() {
x = 1
switch i := x.(type) {
case nil:
fmt.Println("这里是nil,x的类型是%T", i)
case int:
fmt.Println("这里是int,x的类型是%T", i)
case float64:
fmt.Println("这里是float64,x的类型是%T", i)
case bool:
fmt.Println("这里是bool,x的类型是%T", i)
case string:
fmt.Println("这里是string,x的类型是%T", i)
default:
fmt.Println("未知类型")
}
}
运行结果:这里是int,x的类型是%T 1
switch case 的特点如下:
- switch 和 if 语句一样,switch 后面可以带一个可选的简单的初始化语句。
- switch 后面的表达式也是可选的,如果没有表达式,则 case 子句是一个布尔表达式,而不是一个值,此时就相当于多重 if-else 语句。
- switch 条件表达式的值不像C语言那样必须限制为整数,可以是任意支持相等比较运算的类型变量。
- 通过 fallthough 语句来强制执行下一个 case 子句(不再判断下一个 case 子句的条件是否满足)。
- switch 支持 default 语句,当所有的 case 分支都不符合时,执行 default 语句,并且 default 语句可以放到任意位置,并不影响 switch 的判断逻辑。
- switch 和 .(type) 结合可以进行类型的查询。
ICP备案:
公安联网备案: