型切換中的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中文網其他相關文章!