在switch中使用Fallthrough控制流
1 简介
在 Go 中,switch语句在执行switch匹配的 case 后自动中断。与像 C 这样的语言不同,除非明确终止,否则 case 自然会失败,Go 需要关键字fallthrough来实现这种行为。这确保了控制流.
fallthrough 是可选的
– 可以通过显式声明来指定 fallthrough,如此匹配到后则直接退出
– 不像其他语言那样需要 break
2 示例:
func main() {
switch "Marcus" {
case "Tim":
fmt.Println("Wassup Tim")
case "Jenny":
fmt.Println("Wassup Jenny")
case "Marcus":
fmt.Println("Wassup Marcus")
fallthrough
case "Medhi":
fmt.Println("Wassup Medhi")
fallthrough
case "Julian":
fmt.Println("Wassup Julian")
case "Sushant":
fmt.Println("Wassup Sushant")
}
}
用于平台操作
switch syscall.OS {
case "windows":
sd = &sysDir{
Getenv("SystemRoot") + `\system32\drivers\etc`,
[]string{
"hosts",
"networks",
"protocol",
"services",
},
}
case "plan9":
sd = &sysDir{
"/lib/ndb",
[]string{
"common",
"local",
},
}
default:
sd = &sysDir{
"/etc",
[]string{
"group",
"hosts",
"passwd",
},
}
}
失败操作
要进入后续情况,请使用关键字:fallthrough,当前关键字判定后,将会判定连续的下一个。
Go 中的关键字提供了一种显式方法,可以继续执行语句中的下一个 case,而不管是否满足 next case 的条件。
虽然它的行为可能会让刚接触 Go 的开发人员感到惊讶,但如果经过深思熟虑地应用switch fallthrough,它会起到有用的作用。
3 小结
- fallthrough优点
代码可重用性:允许在多个情况下共享逻辑,从而减少冗余。例如,需要相同处理步骤的作可能会落入共享逻辑。
简化顺序处理: 在案例相互构建或需要累积作的情况下,可以简化代码结构。
显式意图: 与其他语言中的隐式透传不同,Go 是有意为之的,让读者清楚地知道下一个情况将执行。
- 缺点fallthrough
绕过 Case Conditions:不检查下一个 Case 的条件,如果不仔细管理,这可能会导致意外行为。
可读性降低: 在复杂的语句中,可能会掩盖控制流,使其他人(或未来的自己)更难理解逻辑。
Limited to Immediate Cases:仅将控制权移动到下一个情况,这与允许跳转到任意情况的其他控制流工具不同。
在本文中,我们探讨了fallthrough 的工作原理 、它的优缺点,以及它在重用逻辑方面大放异彩的实际用例。
- 点赞
- 收藏
- 关注作者
评论(0)