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

Wie implementiert Go Polymorphismus, ohne ihn zu erzwingen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-06 02:29:02426Durchsuche

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{...}
}

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()
}

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!

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