Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erreicht Go Polymorphismus ohne Vererbung?

Wie erreicht Go Polymorphismus ohne Vererbung?

DDD
DDDOriginal
2024-11-06 06:45:02173Durchsuche

How does Go Achieve Polymorphism without Inheritance?

Polymorphismus in Go lang

Wie Sie festgestellt haben, unterstützt Go das traditionelle objektorientierte Konzept des Polymorphismus durch Vererbung nicht. Es gibt jedoch auch andere Möglichkeiten, mithilfe von Schnittstellen und Komposition ähnliche Ergebnisse zu erzielen.

Schnittstelle und Komposition

In Go definieren Schnittstellen Verträge, die die Methoden angeben, die ein Typ implementieren muss . Mit Composition können Sie neue Typen erstellen, indem Sie andere Typen einbetten. Durch die Kombination von Schnittstellen und Komposition können Sie eine Form von Polymorphismus erreichen.

Betrachten Sie beispielsweise den folgenden Code:

<code class="go">package main

import "fmt"

type Foo interface {
    printFoo()
}

type FooImpl struct {
}

type Bar struct {
    FooImpl
}

type Bar2 struct {
    FooImpl
}

func (f FooImpl) printFoo() {
    fmt.Println("Print Foo Impl")
}

func getFoo() Foo {
    return Bar{}
}

func main() {
    fmt.Println("Hello, playground")
    b := getFoo()
    b.printFoo()
}</code>

In diesem Beispiel:

  • Die Foo-Schnittstelle definiert eine printFoo-Methode.
  • FooImpl implementiert die Foo-Schnittstelle mit einer printFoo-Methode.
  • Bar bettet FooImpl ein und implementiert daher die Foo-Schnittstelle.
  • Bar2 bettet FooImpl ein und auch implementiert die Foo-Schnittstelle.
  • getFoo gibt einen Wert vom Typ Foo zurück. Da sowohl Bar als auch Bar2 die Foo-Schnittstelle implementieren, ist Bar2 ein gültiger Rückgabewert für getFoo.
  • main ruft getFoo auf, um einen Foo-Wert zu erhalten, und ruft dann die printFoo-Methode für diesen Wert auf.

Wenn Sie diesen Code ausführen, sehen Sie die folgende Ausgabe:

Hello, playground
Print Foo Impl

Dies zeigt, wie Schnittstellen und Komposition verwendet werden können, um eine Form von Polymorphismus in Go zu erreichen. Durch die Definition einer Schnittstelle können Sie sicherstellen, dass verschiedene Typen einen gemeinsamen Satz von Methoden nutzen. Durch das Einbetten von Typen können Sie neue Typen erstellen, die die Funktionen mehrerer anderer Typen kombinieren. Dadurch können Sie Code schreiben, der verschiedene Typen einheitlich behandelt.

Das obige ist der detaillierte Inhalt vonWie erreicht Go Polymorphismus ohne Vererbung?. 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