执行多个切换案例

时间:2018-06-22 09:25:08

标签: go

我有以下代码:

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检查下一个条件条件,有什么办法可以做到?

1 个答案:

答案 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语句。