转换开始

时间:2017-09-26 05:11:46

标签: 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")
    }
}

2 个答案:

答案 0 :(得分:4)

是。 fallthrough语句将控制转移到表达式开关中的下一个case子句。转移控制时不考虑下一个案例的表达。

specification says this about the fallthrough statement

  

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

这是关于expression switches

  

在case或default子句中,最后一个非空语句可能是(可能标记的)“fallthrough”语句,表示控件应该从该子句的末尾流向下一个子句的第一个语句。否则控制流到“switch”语句的末尾。 “fallthrough”语句可能显示为表达式开关的最后一个句子的最后一个语句。

答案 1 :(得分:2)

那是对的。 fallthrough语句使它从case子句的最后一个语句转到下一个case语句评估的第一个语句。来自spec

  

在case或default子句中,最后一个非空语句可能是a   (可能已标记)&#34; fallthrough&#34;声明表明控制   应该从这个子句的结尾流到第一个语句   下一条。否则控制流到&#34;开关&#34;   声明。 A&#34;通过&#34;声明可能显示为最后一个声明   除了表达式开关的最后一个子句之外的所有子句。