Go switch 失败

dri*_*lii 2 go

我试图理解 switch/fallthrough 关键字。在 switch 块中使用 Fallthrough 语句意味着即使表达式不匹配也会进入下一个块,但这仅在已经存在匹配时才有效,对吧?下面的代码似乎是这样工作的,但我只是想确定一下。

package main

import "fmt"

func main() {
    integer := 5
    switch integer {
    case 4:
        fmt.Println("integer <= 4")
        fallthrough
    case 5:
        fmt.Println("integer <= 5")
        fallthrough
    case 6:
        fmt.Println("integer <= 6")
        fallthrough
    case 7:
        fmt.Println("integer <= 7")
        fallthrough
    case 8:
        fmt.Println("integer <= 8")
        fallthrough
    default:
        fmt.Println("default case")
    }
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 5

是的。Fallthrough 语句将控制转移到表达式开关中的下一个 case 子句。转移控制权时不考虑下一个情况的表达式。

规范对于失败声明是这样说的

“fallthrough”语句将控制转移到表达式“switch”语句中下一个 case 子句的第一个语句。它只能用作此类子句中的最后一个非空语句。

这是关于表达式开关的:

在 case 或 default 子句中,最后一个非空语句可能是(可能标记为)“fallthrough”语句,以指示控制应从本子句的末尾流到下一个子句的第一个语句。否则控制流到“switch”语句的末尾。“fallthrough”语句可能会作为表达式 switch 的最后一个子句之外的所有语句的最后一个语句出现。