Switch 中如何强制执行下一个 case 代码块 ?
在许多编程语言中(如C或者C++),switch
语句会“贯穿”(fall through):如果一个case
匹配成功并且没有遇到break
语句,那么控制流就会继续执行下一个case
的代码。然而,在Go语言中,switch
语句的行为和这些语言不同:当一个case
匹配成功后,控制流会直接跳过剩余的case
,并且从switch
语句后的第一条语句继续执行。
如果你希望在Go语言的switch
语句中实现类似于“贯穿”的行为,你可以使用fallthrough
关键字。fallthrough
关键字会强制执行下一个case
的代码,无论下一个case
的条件是否满足。
以下是一个例子:
package main
import "fmt"
func main() {
switch 1 {
case 1:
fmt.Println("case 1")
fallthrough
case 2:
fmt.Println("case 2")
default:
fmt.Println("default case")
}
}
在这个例子中,switch
语句首先检查第一个case
(case 1
),因为1
等于1
,所以这个case
被执行。然后,fallthrough
关键字强制执行下一个case
的代码,即使1
不等于2
。因此,这段代码的输出将是:
case 1
case 2
请注意,fallthrough
关键字必须是case
代码块的最后一条语句,否则会导致编译错误。此外,fallthrough
不能用在switch
语句的最后一个case
或者default
中,因为在这些位置,没有下一个case
可以执行。