類型切換的失敗:深入解釋
Go 中的類型切換允許根據值的具體類型高效處理值。然而,與標準 switch-case 語句不同的是,在類型 switch 中明確不允許使用fallthrough。這種設計選擇引發了對其基本原則的質疑。
理解原因
Go 規範規定類型開關中不允許「fallthrough」。此禁止源自於多個因素:
澄清範例
用來說明問題,請考慮以下程式碼:
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }
如果允許失敗,則不清楚是什麼類型為字串大小寫列印。我是否應該保留布林值或成為同時包含布林值和字串的介面{}是不明確的。
替代解決方案
雖然不允許失敗類型開關,還有其他方法可以實現類似的行為:
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
這種方法允許更具體地處理不同的類型而不會引入類型不匹配或歧義。
以上是為什麼 Go 的型別切換不允許 Fallthrough?的詳細內容。更多資訊請關注PHP中文網其他相關文章!