我正在閱讀關於Go中switch語句的this book部分。但這個例子讓我感到困惑:switch語句中falltrough的行爲
package main
import "fmt"
func main() {
k := 6
switch k {
case 4: fmt.Println("was <= 4"); fallthrough;
case 5: fmt.Println("was <= 5"); fallthrough;
case 6: fmt.Println("was <= 6"); fallthrough;
case 7: fmt.Println("was <= 7"); fallthrough;
case 8: fmt.Println("was <= 8"); fallthrough;
default: fmt.Println("default case")
}
}
輸出是:
was <= 6
was <= 7
was <= 8
default case
而且書中指出:
使用下通聲明,表明以下的情況下塊的當前必須執行。
現在我要提問:
- 爲什麼Go默認比較,在這種情況下,k是低?
- 該文字提到執行以下情況。精細。但爲什麼他們不是隻執行案例匹配k?
感謝您的報價。然後,我首先明白了'穿越'問題。在[this](https://play.golang。org/p/aZg0Qv8Ull)代碼示例我創建了一個簡單的場景,每個人都應該猜測整數。愛麗絲和丹都是對的。如果沒有「fallthrough」,腳本只會將Alice打印爲贏家,而Bob的情況不會被檢查。我預計,'fallthrough'會搜索其他匹配項,並只執行那些而不是全部。有沒有辦法在不使用for循環的情況下在switch語句中找到多個匹配項? – user3147268
@ user3147268:否。但是,'switch'語句是'if'語句的特殊限定形式。使用'if'語句,例如https://play.golang.org/p/l7NIEdP_Ic – peterSO
具有諷刺意味的是,爲什麼程序員爲了避免if-else混亂而使用switch,是因爲這個原因。 – user3147268