我有以下代码:
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
检查下一个条件条件,有什么办法可以做到?
答案 0 :(得分:3)
简短的回答:否,您无法使用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
通过其中一个条件,那么显然还将通过所有后续条件。 / p>
此外,如果您实际上不想简单地将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
语句。