置信学习 Go 语言的小伙伴对 fallthrough 这个关键词并不生疏,与 Java、PHP 等语言不同,Go 语言的 switch case 语句不须要在每个 case 前面增加 break 语句,默认在执行完 case 之后,会主动 break,从 switch 语句中本义进去。
而咱们想要使程序能程序透传到下个 case 中,这时咱们就须要手动增加上 fallthrough 关键词,例如:
package main
import (
"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 main
import (
"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 main
import ("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{} 也不会有两种类型。
如果您还有更好的解释,欢送留言一起交换~~