package main
import "fmt"
func main() {
var i int = 10
switch true {
case i < 20:
fmt.Printf("%v is less than 20\n", i)
i = 100
fallthrough
case i < 19:
fmt.Printf("%v is less than 19\n", i)
fallthrough
case i < 18:
fmt.Printf("%v is less than 18\n", i)
fallthrough
case i > 50:
fmt.Printf("%v is greater than 50\n", i)
fallthrough
case i < 19:
fmt.Printf("%v is less than 19\n", i)
fallthrough
case i == 100:
fmt.Printf("%v is equal to 100\n", i)
fallthrough
case i < 17:
fmt.Printf("%v is less than 17\n", i)
}
}
Output:
10 is less than 20
100 is less than 19
100 is less than 18
100 is greater than 50
100 is less than 19
100 is equal to 100
100 is less than 17
Is this expected behavior?
CodePudding user response:
The fallthrough
statement transfers control to the first statement of the next case
block.
The fallthrough
statement does not mean to continue evaluating the expression of the next case
, but to unconditionally start executing the next case
block.
Quoting from fallthrough
statement doc:
A "fallthrough" statement transfers control to the first statement of the next case clause in an expression "switch" statement.
Quoting from switch
statement doc:
In a case or default clause, the last non-empty statement may be a (possibly labeled) "fallthrough" statement to indicate that control should flow from the end of this clause to the first statement of the next clause. Otherwise control flows to the end of the "switch" statement.