关于golang:Go语言中一个fallthrough的使用问题

置信学习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{}也不会有两种类型。

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

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理