Heim > Backend-Entwicklung > Golang > Wie kann ich Schnittstellen und eingebettete Typen verwenden, um generische Methoden in Go zu erstellen?

Wie kann ich Schnittstellen und eingebettete Typen verwenden, um generische Methoden in Go zu erstellen?

Barbara Streisand
Freigeben: 2024-10-27 01:20:02
Original
442 Leute haben es durchsucht

How can I use interfaces and embedded types to create generic methods in Go?

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

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

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

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

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage