置信学习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{}也不会有两种类型。
如果您还有更好的解释,欢送留言一起交换~~