Beliebiger Typ und Implementierung generischer Listen in Go
Bei der Go-Programmierung kann der Mangel an Generika zu Herausforderungen bei der Implementierung von Datenstrukturen führen . Lassen Sie uns zwei häufige Probleme ansprechen:
1. Generische Listen implementieren
Go unterstützt keine generischen Listen direkt, stellt jedoch den Typ interface{} zur Darstellung eines beliebigen Werts bereit. Mit dieser Schnittstelle können „generische“ Datenstrukturen erstellt werden, die Werte jeglicher Art enthalten können.
Die Verwendung von interface{} hat jedoch Nachteile, da Sie beim Zugriff auf die Werte manuell „asser“ eingeben müssen. Der folgende Code definiert beispielsweise eine Liste von Schnittstellen{}:
type AnyList []interface{}
So fügen Sie der Liste eine Ganzzahl hinzu:
list := AnyList{1}
Um die Ganzzahl abzurufen, müssen Sie „assertion“ eingeben zurück zu seinem ursprünglichen Typ:
value := list[0].(int)
2. Erstellen von Containern mit Feldern bestimmter Typen
In Go gibt es kein direktes Äquivalent zu algebraischen Datentypen wie List a in Haskell oder val List[Animal { type SuitableFood = Grass} ] in Scala. Sie können jedoch eine Kombination aus Schnittstellen und Einbettung verwenden, um ähnliche Ergebnisse zu erzielen.
Sie können beispielsweise eine Schnittstelle für Tiere definieren:
type Animal interface { GetSuitableFood() string }
Sie können dann eine Struktur für Tiere definieren die ein „SuitableFood“-Feld vom Typ string haben:
type GrassEatingAnimal struct { Animal SuitableFood string }
Um eine Liste von Tieren zu erstellen, die fressen können Gras:
list := []*GrassEatingAnimal{}
So fügen Sie ein Tier zur Liste hinzu:
animal := &GrassEatingAnimal{SuitableFood: "Grass"} list = append(list, animal)
Dieser Ansatz bietet eine Möglichkeit, Container mit Feldern bestimmter Typen zu erstellen, allerdings mit mehr manuellem Aufwand im Vergleich zu Sprachen mit Generika.
Das obige ist der detaillierte Inhalt vonWie kann ich generische Listen und typspezifische Container in Go Without Generics implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!