Heim >Backend-Entwicklung >Golang >Wie kann ich generische Listen und typspezifische Container in Go Without Generics implementieren?

Wie kann ich generische Listen und typspezifische Container in Go Without Generics implementieren?

DDD
DDDOriginal
2024-12-16 20:11:14559Durchsuche

How Can I Implement Generic Lists and Type-Specific Containers in Go Without Generics?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn