Generische Methodenparameter in Golang
In Go ist es möglich, generische Methoden zu definieren, die mit verschiedenen Typen arbeiten, was eine größere Flexibilität und Wiederverwendbarkeit des Codes bietet . Um das Problem im bereitgestellten Code zu beheben, untersuchen wir die Verwendung von Schnittstellen und eingebetteten Typen.
Verwenden von Schnittstellen
Schnittstellen definieren eine Reihe von Methoden, die einen Typ darstellen muss implementiert werden, um die Schnittstelle zu erfüllen. Durch die Verwendung von Schnittstellen in Methodenparametern können wir die Methode von bestimmten Typen entkoppeln, sodass sie mit jedem Typ verwendet werden kann, der die Schnittstelle implementiert.
Bedenken Sie den folgenden Code:
<code class="go">type Mammal interface { GetID() int GetName() string }</code>
Hier , Mammal definiert eine Schnittstelle mit zwei Methoden: GetID und GetName.
Einbettungsschnittstellen
Eingebettete Schnittstellen ermöglichen es uns, Typen zu erstellen, die die Methoden einer oder mehrerer Schnittstellen erben. Beispielsweise kann der Typ Mensch die Mammal-Schnittstelle einbetten:
<code class="go">type Human struct { MammalImpl HairColor string }</code>
Implementierung
Als nächstes müssen wir die Methoden GetID und GetName sowohl für MammalImpl als auch HumanImpl implementieren . Da HumanImpl MammalImpl einbettet, erbt es die Implementierungen für GetID und GetName:
<code class="go">type MammalImpl struct { ID int Name string } func (m MammalImpl) GetID() int { return m.ID } func (m MammalImpl) GetName() string { return m.Name } type HumanImpl struct { MammalImpl HairColor string }</code>
Ändern der Count-Funktion
Jetzt können wir die Count-Funktion ändern, um a zu akzeptieren Slice eines beliebigen Typs, der die Mammal-Schnittstelle erfüllt:
<code class="go">func Count(ms []Mammal) *[]string { IDs := make([]string, len(ms)) for i, m := range ms { IDs[i] = strconv.Itoa(m.GetID()) // Access ID via the method: GetID() } return &IDs }</code>
Slices von Säugetieren und Menschen erstellen
Schließlich können wir Slices verschiedener Typen erstellen, die Mammal implementieren:
<code class="go">mammals := []Mammal{ MammalImpl{1, "Carnivorious"}, MammalImpl{2, "Ominivorious"}, } humans := []Mammal{ HumanImpl{MammalImpl: MammalImpl{ID: 1, Name: "Peter"}, HairColor: "Black"}, HumanImpl{MammalImpl: MammalImpl{ID: 2, Name: "Paul"}, HairColor: "Red"}, }</code>
Fazit
Durch die Verwendung von Schnittstellen und eingebetteten Typen können wir generische Methoden erstellen, die mit verschiedenen Datentypen arbeiten und so mehr Flexibilität und Wiederverwendbarkeit des Codes in Go-Programmen bieten .
Das obige ist der detaillierte Inhalt vonWie kann ich Schnittstellen und eingebettete Typen verwenden, um generische Methoden in Go zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!