Heim > Artikel > Backend-Entwicklung > Wie kann ich generische Methodenparameter in Go verwenden, damit eine Count-Funktion mit jedem Typ funktioniert, der über eine ID-Eigenschaft verfügt?
Verwendung generischer Methodenparameter in Go
Go-Generika bieten Flexibilität bei der Definition von Methoden und Datenstrukturen, die mit verschiedenen Datentypen arbeiten können. In diesem speziellen Fall besteht die Aufgabe darin, die Count-Funktion so zu ändern, dass sie jeden Typ akzeptiert, der eine ID-Eigenschaft besitzt.
Schnittstellenbasierte Lösung
Schnittstellenbasiert Lösungen ermöglichen die Trennung von Verhaltensweisen von konkreten Typen. Durch die Verwendung von Schnittstellen können wir die gemeinsamen Merkmale verschiedener Datentypen abstrahieren.
<code class="go">type IDed interface { GetID() int }</code>
Diese Schnittstelle definiert eine einzelne Methode, GetID, die eine Ganzzahl zurückgibt. Verschiedene Typen können diese Schnittstelle implementieren, sodass die Count-Funktion mit jedem Typ arbeiten kann, der die Schnittstelle erfüllt.
ImplStruct-Implementierung
Um dies zu implementieren, definieren wir einen zweiten Typ , ImplStruct, das die IDed-Schnittstelle einbettet. Dieser Typ umfasst eine GetID-Methode und ein zusätzliches Namensfeld.
<code class="go">type ImplStruct struct { IDed Name string }</code>
Geänderte Zählfunktion
Die Zählfunktion kann jetzt jeden Typ akzeptieren, der die IDed-Schnittstelle implementiert. Das bedeutet, dass es sowohl mit Säugetier- als auch mit Menschentypen funktionieren kann.
<code class="go">func Count(data []IDed) []string { ids := make([]string, len(data)) for i, m := range data { ids[i] = strconv.Itoa(m.GetID()) } return ids }</code>
Verwendung
Mit der geänderten Count-Funktion und dem ImplStruct-Typ können wir jetzt die IDs zählen sowohl für Säugetier- als auch für Menschentypen.
<code class="go">mammals := []ImplStruct{ ImplStruct{ID: 1, Name: "Carnivorious"}, ImplStruct{ID: 2, Name: "Ominivorious"}, } humans := []ImplStruct{ ImplStruct{ID: 1, Name: "Peter"}, ImplStruct{ID: 2, Name: "Paul"}, } fmt.Println(Count(mammals)) fmt.Println(Count(humans))</code>
Fazit
In diesem verbesserten Code ermöglichen die abstrakte IDed-Schnittstelle und die eingebettete ImplStruct, dass die Count-Funktion mit jedem Typ funktioniert das die GetID-Methode implementiert. Dieser Ansatz bietet Flexibilität und Modularität bei der Handhabung verschiedener Datentypen mit einer gemeinsamen Funktionalität.
Das obige ist der detaillierte Inhalt vonWie kann ich generische Methodenparameter in Go verwenden, damit eine Count-Funktion mit jedem Typ funktioniert, der über eine ID-Eigenschaft verfügt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!