golang | switch-case
·
前言
switch语句用于基于不同条件执行不同动作,每一个case分支都是唯一的,从上至下逐一测试,直到匹配为止。switch语句执行的过程从上至下,直到找到匹配项。switch默认情况下case最后自带break语句,所以不需要再额外添加,匹配成功后就不会执行其他case,如果我们需要执行后面的case,可以使用fallthrough。
语法
switch exp {
case val1:
...
case val2:
...
default:
...
}
demo
var exp = 2
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2:
fmt.Println("匹配到 2")
case 3:
fmt.Println("匹配到 3")
case 4:
fmt.Println("匹配到 4")
}
// 匹配到 2
详解
switch常见用法就是通过判断表达式exp是否满足case中的条件,如果满足就执行case后的动作,如果不满足,继续判断,直到找到满足的case
var exp = 2
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2:
fmt.Println("匹配到 2")
case 3:
fmt.Println("匹配到 3")
case 4:
fmt.Println("匹配到 4")
}
// 匹配到 2
- 如果所有的
case都没有匹配到,则switch中的动作都不会被执行
var exp = 5
var val = 0
switch exp {
case 1:
val = 1
fmt.Println("匹配到 1")
case 2:
val = 2
fmt.Println("匹配到 2")
case 3:
val = 3
fmt.Println("匹配到 3")
case 4:
val = 4
fmt.Println("匹配到 4")
}
fmt.Println("val 的值为 :", val)
// val 的值为 : 0
- 如果所有的case都不满足,可以配置默认
动作,默认动作配置到default后
var exp = 5
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2:
fmt.Println("匹配到 2")
case 3:
fmt.Println("匹配到 3")
case 4:
fmt.Println("匹配到 4")
default:
fmt.Println("没有匹配到...")
// 没有匹配到...
- 如果一个
case后需要写多个条件,则通过条件1,条件2...语法实现即可
var exp = 2
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2,3,4:
fmt.Println("匹配到 2")
}
// 匹配到 2
- 如果匹配到指定
case后,执行完该case后的动作,希望能执行相邻的下一个case后的动作,则通过fallthrough可以实现。每一个fallthrough可以实现一次穿透动作,不管下边的case条件是否满足
var exp = 2
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2:
fmt.Println("匹配到 2")
fallthrough
case 3:
fmt.Println("匹配到 3")
case 4:
fmt.Println("匹配到 4")
}
// 匹配到 2
// 匹配到 3
- 如果想
穿透多个case,则可以再每个case动作后都添加一个fallthrough关键字
var exp = 2
switch exp {
case 1:
fmt.Println("匹配到 1")
case 2:
fmt.Println("匹配到 2")
fallthrough
case 3:
fmt.Println("匹配到 3")
fallthrough
case 4:
fmt.Println("匹配到 4")
}
// 匹配到 2
// 匹配到 3
// 匹配到 4
- 如果需要处理多表达式,例如
表达式1 == true执行动作1,表达式2 == true执行动作2… ,可以通过以下语法实现:
switch {
case exp1:
action1
case exp2:
action2
... ...
default :
actionN
}
例如:
switch {
case 2 > 3:
fmt.Println("2 > 3")
case 3 > 4:
fmt.Println("3 > 4")
case 2 < 3:
fmt.Println("2 < 3")
case 4 > 5:
fmt.Println("4 > 5")
}
// 2 < 3
前边提到的规则和fallthrough关键字,对这种情况也同样生效
swtich还可以做interface{}变量类型判断,例如接口传参为interface{}类型,或是第三方接口返回变量为interface{}类型等
var i interface{} = 0
switch i.(type) {
case int:
fmt.Println("int")
case string:
fmt.Println("string")
}
// int
总结
switch语句为golang中常用的分支语句,熟练掌握其语法特性在后续的研发工作中,会避免很多不必要的麻烦,同时针对一些特殊场景,swtich语句的特性也许会起到意向不到的作用
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)