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
Freigeben: 2024-12-16 20:11:14
Original
560 Leute haben es durchsucht

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{}
Nach dem Login kopieren

So fügen Sie der Liste eine Ganzzahl hinzu:

list := AnyList{1}
Nach dem Login kopieren

Um die Ganzzahl abzurufen, müssen Sie „assertion“ eingeben zurück zu seinem ursprünglichen Typ:

value := list[0].(int)
Nach dem Login kopieren

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
}
Nach dem Login kopieren

Sie können dann eine Struktur für Tiere definieren die ein „SuitableFood“-Feld vom Typ string haben:

type GrassEatingAnimal struct {
    Animal
    SuitableFood string
}
Nach dem Login kopieren

Um eine Liste von Tieren zu erstellen, die fressen können Gras:

list := []*GrassEatingAnimal{}
Nach dem Login kopieren

So fügen Sie ein Tier zur Liste hinzu:

animal := &GrassEatingAnimal{SuitableFood: "Grass"}
list = append(list, animal)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage