實作泛型列表
Go 本身不支援泛型,但它提供了一個使用名為Any 的空介面類型的替代方法。此介面用作任何資料類型的佔位符。
type Any interface{}
要檢查 Any 值是否為零,您可以使用 Reflect 套件檢查其基礎類型。
if reflect.ValueOf(value).IsNil() { // Value is nil }
設計代數資料類型
代數資料類型,例如提供了類似 Haskell 的範例,可以使用介面在 Go 中實作。例如,要表示一個鍊錶:
type List[T Any] interface { Head() T Tail() List[T] } // Nil list type Nil[T Any] struct{} // Cons list type Cons[T Any] struct { head T tail List[T] }
具有特定欄位類型的物件的容器
Go 不像 Scala 那樣支援型別參數。但是,您可以建立一個類型來保證特定欄位類型的存在。
type Animal interface { SuitableFood() string } type GrassEatingAnimal struct { SuitableFood func() string }
您可以透過使用通用映射來實現類似的功能:
type AnimalMap[K Comparable, V Animal] map[K]V
以上是在沒有原生支援的情況下,Go 如何模仿泛型和代數資料型別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!