相信学习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{}也不会有两种类型。
如果您还有更好的解释,欢迎留言一起交流~~
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。