首頁 >後端開發 >Golang >為什麼 Go 的型別開關禁止 Fallthrough?

為什麼 Go 的型別開關禁止 Fallthrough?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-16 00:35:02227瀏覽

Why is Fallthrough Prohibited in Go's Type Switches?

型切換中的Fallthrough 禁止:

在Go 中,「fallthrough」語句是一種語言結構,允許在沒有顯式break語句的switch語句。但是,類型開關中不允許失敗。

為什麼會出現這種情況?

類型開關決定表達式的類型,並將其指派給 switch case 中指定的變數。此變數表示 switch 中該點表達式的特定類型。

如果允許失敗,則會出現類型不符問題。讓我們考慮一下提供的程式碼片段:

//Empty interface
var x interface{}

//A int, float64, bool or string value
x = ...

switch i := x.(type) {
case int:
    fmt.Println(i + 1)
case float64:
    fmt.Println(i + 2.0)
case bool:
    fallthrough
case string:
    fmt.Printf("%v", i)
default:
    fmt.Println("Unknown type. Sorry!")
}

如果 bool 為 true,則變數 i 被指派介面 x 中 bool 的值。如果允許失敗,則執行將繼續到字串大小寫。然而,此時變數 i 仍然保留 bool 值。這種類型不匹配會導致錯誤。

此外,fallthrough 語句在型別切換中沒有意義,因為它無法改變變數 i 的型別。類型開關旨在將表達式的類型縮小為每種情況下的特定類型。允許失敗會破壞這一目的。

為了實現所需的行為,可以在每種情況下使用帶有明確類型轉換的switch 語句,如下所示:

switch i := x.(type) {
case bool, string:
    if b, ok := i.(bool); ok {
        fmt.Println(b) // value as bool
    } else {
        fmt.Printf("%v", i) // value as string
    }
default:
    fmt.Println("Unknown type. Sorry!")
}

透過使用這種方法,可以在單一switch 語句中處理一系列類型,而無需失敗。

以上是為什麼 Go 的型別開關禁止 Fallthrough?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn