在開發 Go 應用程式時,了解介面類型約束所施加的限制至關重要。具有類型元素的介面類型(例如聯合)的使用受到限制。本文深入研究了介面類型約束的細節,並提供了範例來說明其影響。
在 Go 中,包含型別元素(例如聯合)的介面被考慮非基本。這意味著它們不能用作變數的類型或作為其他非介面類型的元件。例如,以下 Number 介面是非基本接口,因為它包含並集:
type Number interface { int | int64 | float64 }
當嘗試像這樣初始化Number 介面的切片:
a := []Number{Number(1), Number(2), Number(3), Number(4)}
Go 會引發錯誤“介麵包含類型約束”,因為Number 介面不能用於型別轉換(如Number( 1)).
根據Go語言規範,非基本介面只能用作類型約束或用作其他用作約束的介面的元素。它們不能是值或變數的類型。這是因為接口中類型元素的存在使其成為非基本接口,並且與直接實例化不相容。
雖然不能使用非基本介面直接作為類型,它們可以用作型別限制。例如,考慮以下 Coords 結構,它使用受 Number 介面約束的泛型類型參數 T:
type Coordinates[T Number] struct { x, y T }
在這種情況下,座標結構只能以滿足 Number 介面限制的型別實例化。
具有類型約束的介面類型在確保 Go 應用程式中的型別安全。透過了解非基本介面的限制並在類型約束內正確利用它們,開發人員可以創建健壯且高效的程式碼。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3