Heim > Backend-Entwicklung > Golang > Wie implementiert Go Polymorphismus, ohne ihn zu erzwingen?

Wie implementiert Go Polymorphismus, ohne ihn zu erzwingen?

Mary-Kate Olsen
Freigeben: 2024-11-06 02:29:02
Original
426 Leute haben es durchsucht

How Does Go Implement Polymorphism Without Enforcing It?

Polymorphismus in Go

In der objektorientierten Programmierung ermöglicht Polymorphismus, dass eine einzelne Schnittstelle auf Objekte mehrerer Typen verweist. Go erzwingt dieses Konzept nicht strikt, bietet aber alternative Möglichkeiten, ein ähnliches Verhalten zu erreichen.

Bedenken Sie den folgenden Codeausschnitt:

type Foo struct {
   ...
}

type Bar struct {
   Foo
   ...
}

func getFoo() Foo {
   return Bar{...}
}
Nach dem Login kopieren

Wie Sie bemerkt haben, löst dieser Code in Go eine aus Fehler, der darauf hinweist, dass getFoo() eine Instanz von Foo zurückgeben muss. Um ein polymorphes Verhalten zu erreichen, können Sie Schnittstellen und Komposition in Go nutzen:

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

In diesem aktualisierten Beispiel:

  • Wir definieren eine Schnittstelle namens Foo, die eine Funktion printFoo deklariert.
  • FooImpl implementiert die Foo-Schnittstelle.
  • Bar und Bar2 sind Strukturen, die den Typ FooImpl einbetten.
  • Die Funktion getFoo() gibt einen Wert zurück, der die Foo-Schnittstelle implementiert und ermöglicht Damit wird entweder eine Bar- oder eine Bar2-Instanz zurückgegeben.
  • Wenn printFoo für den zurückgegebenen Wert von getFoo() aufgerufen wird, sendet Go die Methode dynamisch basierend auf dem zugrunde liegenden Typ.

Diese Technik Bietet eine Möglichkeit, Polymorphismus in Go durch die Verwendung von Schnittstellen und Kompositionen zu erreichen, sodass eine einzige Schnittstelle für verschiedene konkrete Typen verwendet werden kann.

Das obige ist der detaillierte Inhalt vonWie implementiert Go Polymorphismus, ohne ihn zu erzwingen?. 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