流程控制(switch)
💥本文章所有相关go代码参考自go 1.18+版本
- 表达式型switch:包含与
switch
表达式的值进行比较的表达式。 - 类型型switch:包含与
switch
表达式的类型进行比较的类型。
switch
使用方式
switch var{}
switch
表达式可以执行一个简单语句完成运算从而得到表达式的值。
|
|
|
|
switch{}
- 不提供任何被判断的值(实际上默认为判断是否为
true
)然后在每个case
分支中检测不同的条件,当任一分支的测试结果为true
时,该分支的代码会被执行,此时语句相当于switch true
。
|
|
|
|
switch Init; var{}
switch
语句第三种形式,包含一个初始化语句。
|
|
|
|
|
|
表达式型switch
- 如果
switch
表达式求值为无类型常量,则首先将其转换为默认类型(整型默认int
,浮点数默认float64
,字符串默认string
,复数默认complex128
)。- 如果是无类型的布尔值,则首先将其转换为
bool
类型。 - 预先声明的无类型值
nil
不能用作开关表达式(由于switch
转换nil
为默认类型报错)。
- 如果是无类型的布尔值,则首先将其转换为
- 如果
switch
表达式是无类型的,则首先将其转换为switch
表达式的类型。- 对于每个(可能已转换的)
switch
表达式x
和switch
表达式的值t
,x
和t
必须可以进行有效的比较。
- 对于每个(可能已转换的)
- 在
switch
或default
字句中,最后一个非空语句可以是fallthrough
语句。- 以指示应该从该字句的末尾流向下一个字句的第一个语句,无论下一个字句的条件是否满足。
- 出现
fallthrough
语句后,它后面只能接下一个字句。
|
|
nil
不能作为switch
表达式
|
|
无类型常量用作switch
|
|
switch
常用示例
|
|
fallthrough
关键字
|
|
|
|
fallthrough
和default
一起使用。
|
|
类型型switch
- 比较的类型而不是值,它在其他方面类似表达式型
switch
,只不过分支选择的是类型而不是值。 - 它由一个特殊的
switch
表达式标记,该表达式使用类型断言的形式来进行动态类型判断。
x.(type)
switch
语句还可以被用于type-switch
来判断某个interface
变量中实际存储的变量类型。type switch
语句格式如下:
|
|
|
|
注意
val1
和val2
可以是同类型的任意值,类型不局限于常数或整数,但必须是相同的类型,或最终结果为相同类型的表达式。- 前花括号
{
必须和switch
关键字在同一行。 - 可以同时测试多个可能符合条件的值,使用逗号分割它们。
- 如
case val1, val2, val3
而在其他语言中则是case val1: case val2: case val3:
这种形式。 - 一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个
switch
代码块。 - 也就是说,不需要特别使用
break
语句来表示结束,如果使用了仍然是在switch块中。
- 如
- 如果在执行完每个分支的代码后,还是希望继续执行后续分支的代码。
- 可以使用
fallthrough
关键字来达到目的,fallthrough
强制执行后面的(紧挨着的)下一条分支代码,不管是case或default分支都会执行。 fallthrough
不会判断下一条分支的表达式结果是否为真。
- 可以使用
|
|