我正在尝试了解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")
}
}
答案 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;声明可能显示为最后一个声明 除了表达式开关的最后一个子句之外的所有子句。