Golang | switch-case
Switch-case
switch
语句用于基于不同条件执行不同动作,每一个 case
分支都是唯一的,从上直下逐一测试,直到匹配为止。 switch
分支表达式可以是任意类型,不限于常量。可省略 break
,默认自动终止。
Switch 语句
Go
语言中的 switch
结构使用上更加灵活。它接受任意形式的表达式:
import "fmt"
func main() {
k := 1
switch {
case k == 1:
fmt.Println("k = ",k)
case k == 2:
fmt.Println("k = ",k)
case k == 3:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
上面这一种
Switch
语句其实和if-else
语句差不多。
import "fmt"
func main() {
k := 2
switch k {
case 1:
fmt.Println("k = ",k)
case 2:
fmt.Println("k = ",k)
case 3:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
注意:case 后面的常量不可以重复
多个条件的case 语句
多个条件的 case
语句和单个没有什么差别,只是选择的范围大了一点:
import "fmt"
func main() {
k := 4
switch k {
case 1, 2, 3:
fmt.Println("k = ",k)
case 4, 5, 6:
fmt.Println("k = ",k)
case 7, 8, 9:
fmt.Println("k = ",k)
default:
fmt.Println("default case")
}
}
所有的常量还是不可以重复
每一个 case
分支都是唯一的,从上至下逐一测试,直到匹配为止。
Go
语言使用快速的查找算法来测试 switch
条件与 case
分支的匹配情况,直到算法匹配到某个 case
或者进入 default
条件为止。
一旦成功地匹配到某个分支,在执行完相应代码后就会退出整个 switch
代码块,也就是说您不需要特别使用 break
语句来表示结束。
Type Switch
switch
语句还可以被用于 type-switch
来判断某个 interface
变量中实际存储的变量类型。
例如:
import "fmt"
func main() {
var t interface{}
switch t.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
case bool:
fmt.Println("bool")
case float64:
fmt.Println("float64")
default:
fmt.Println("default interface")
}
}
根据接口的类型来确定要执行的代码。
Switch 穿透
如果在执行完每个分支的代码后,还希望继续执行后续分支的代码,可以使用 fallthrough
关键字来达到目的。
fallthrough
只能穿透一层,意思是它让你直接执行下一个 case
的语句,而且不需要判断条件。
import "fmt"
func main() {
i := 3
switch i {
case 1, 2:
fmt.Println("1,2")
fallthrough
case 3, 4:
fmt.Println("3,4")
fallthrough
case 5, 6:
fmt.Println("5,6")
fallthrough
default:
fmt.Println("default case")
}
// 结果:
// 3,4
// 5,6
// default case
}
在
switch
语句中,只要遇到fallthrough
就会往一下个case
中穿透。
关注公众号,随时获取最新资讯
细节决定成败!
个人愚见,如有不对,恳请斧正!