我有以下代码:
package main
import (
"fmt"
)
func main() {
switch num := 75; { //num is not a constant
case num < 50:
fmt.Printf("%d is lesser than 50\n", num)
case num < 100:
fmt.Printf("%d is lesser than 100\n", num)
case num < 60:
fmt.Printf("%d is lesser than 60", num)
case num < 200:
fmt.Printf("%d is lesser than 200", num)
}
}
如果我要执行下一种情况,则可以使用
fallthrough
,但它不会根据情况检查条件。我需要检查条件:即使遇到一种情况,我也想继续正常进行切换。我也想用
fallthrough
检查下一个情况,有什么办法可以做到? 最佳答案
简短答案:否,您不能使用case
检查后续的fallthrough
条件,因为fallthrough
是无条件的,会强制执行下一种情况。这就是它的目的。
长答案:您仍然可以使用fallthrough
:如果在这种情况下仔细观察,您只需要按照有意义的方式对案例重新排序即可。请注意,对于一般情况,这是不正确的。
switch num := 75; {
case num < 50:
fmt.Printf("%d is less than 50\n", num)
fallthrough // Any number less than 50 will also be less than 60
case num < 60:
fmt.Printf("%d is less than 60\n", num)
fallthrough // Any number less than 60 will also be less than 100
case num < 100:
fmt.Printf("%d is less than 100\n", num)
fallthrough // Any number less than 100 will also be less than 200
case num < 200:
fmt.Printf("%d is less than 200\n", num)
}
这样,您就可以安全地使用
fallthrough
,因为由于条件的排序正确,所以您已经知道,如果num
通过其中一个条件,那么显然也将通过每个后续条件。此外,如果您实际上不想简单地将
fallthrough
转换为下一个大小写,而是想要执行另一种情况,则可以添加带标签的大小写,并使用goto
跳至该大小写。switch num := 75; {
firstCase:
fallthrough
case num < 50:
fmt.Println("something something\n")
case num < 100:
fmt.Printf("%d is less than 100\n", num)
goto firstCase
}
查看Go GitHub Wiki here了解更多信息。
顺便说一句,如果您使用的是
switch
语句,并且需要强制执行一些不自然的大小写处理,那么您可能将整个事情做错了:考虑使用另一种方法,例如嵌套的if
语句。关于go - 执行多个开关案例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50984814/