置信学习Go语言的小伙伴对fallthrough这个关键词并不生疏,与Java、PHP等语言不同,Go语言的switch case语句不须要在每个case前面增加break语句,默认在执行完case之后,会主动break,从switch语句中本义进去。

而咱们想要使程序能程序透传到下个case中,这时咱们就须要手动增加上fallthrough关键词,例如:

package mainimport (    "fmt"    "time")func main() {    switch num := time.Now().Month(); {    case num <= 3:        fmt.Println("以后是第一季度")    case num > 6:        fmt.Println("以后是下半年")    default:        fmt.Println("未知月份")    }}

执行后后果当然会输入:以后是第一季度

而不会继续执行,输入“以后是下半年”或是“未知年份”的提醒。

这时我能够应用fallthrough关键词来强制执行上面的case语句的内容。

package mainimport (    "fmt"    "time")func main() {    switch num := time.Now().Month(); {    case num <= 3:        fmt.Println("以后是第一季度")        fallthrough    case num > 6:        fmt.Println("以后是下半年")    default:        fmt.Println("未知月份")    }}

这时执行代码后,会输入

以后是第一季度

以后是下半年

这里咱们须要留神一下,fallthrough的透传会间接传递给下一个case,而不会去判断下一个case的条件。

但有一种状况是无奈应用fallthrough来进行透传的,示例如下:

package mainimport (    "fmt")func main() {    var num interface{}    var num1 int = 1    num = num1    switch num.(type) {    case int:        fmt.Printf("以后num类型是:%T\n", num)    fallthrough    case float64:        fmt.Printf("以后num类型是:%T\n", num)    default:        fmt.Printf("以后num类型是:%T\n", num)    }}

这时候,如果你应用vscode来开发,会提醒一个红色的波浪线,如图:

这就表明代码是有问题的,咱们看这个提醒,fallthrough statement out of place,翻译过去就是fallthrough这个申明不适合,那和方才的示例不一样了啊。咱们点这个谬误提醒进去。
https://pkg.go.dev/golang.org...

会看到有如下的阐明

很显然这是个谬误示例,那也就是说官网不容许这样应用。

从下面的代码来看,咱们应用switch判断interface{}的类型的时候,是不被容许应用fallthrough的。

这里我了解是type-switch是一种非凡的组合,专门用来判断interface{}类型的,一个interface{}也不会有两种类型。

如果您还有更好的解释,欢送留言一起交换~~