類型切換的失敗:深入解釋
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) }
如果允許fallthrough,則不清楚將為字串大小寫列印什麼類型。 i 應該保留布林值還是成為同時包含布林值和字串的介面{}是不明確的。
替代解決方案
雖然在type 開關,還有其他方法可以實現類似的行為:
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 }
此方法允許對不同類型進行更具體的處理,而不會引入類型不匹配或歧義。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3