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?

Wie kann ich generische Methodenparameter in Go verwenden, damit eine Count-Funktion mit jedem Typ funktioniert, der über eine ID-Eigenschaft verfügt?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 15:01:02915Durchsuche

How can I use generic method parameters in Go to make a Count function work with any type that has an ID property?

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!

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