Generische Listen implementieren
Go unterstützt nicht nativ Generika, bietet aber eine Alternativer Ansatz mit einem leeren Schnittstellentyp namens Any. Diese Schnittstelle dient als Platzhalter für jeden Datentyp.
type Any interface{}
Um zu überprüfen, ob ein Any-Wert Null ist, können Sie das Reflect-Paket verwenden, um den zugrunde liegenden Typ zu untersuchen.
if reflect.ValueOf(value).IsNil() { // Value is nil }
Entwerfen algebraischer Datentypen
Algebraische Datentypen, wie das bereitgestellte Haskell-ähnliche Beispiel, können über Schnittstellen in Go implementiert werden. Um beispielsweise eine verknüpfte Liste darzustellen:
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] }
Container für Objekte mit bestimmten Feldtypen
Go unterstützt keine Typparameter wie Scala. Sie können jedoch einen Typ erstellen, der das Vorhandensein eines 特定字段类型 garantiert.
type Animal interface { SuitableFood() string } type GrassEatingAnimal struct { SuitableFood func() string }
Sie können eine ähnliche Funktionalität erreichen, indem Sie eine generische Karte verwenden:
type AnimalMap[K Comparable, V Animal] map[K]V
Das obige ist der detaillierte Inhalt vonWie können generische und algebraische Datentypen ohne native Unterstützung nachgeahmt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!