In der objektorientierten Programmierung ermöglicht der Polymorphismus, dass Objekte basierend auf ihrer Klasse unterschiedliche Verhaltensweisen zeigen. Aber in Go wird das Konzept des Polymorphismus nicht im herkömmlichen Sinne umgesetzt. Lassen Sie uns die Gründe dafür untersuchen und untersuchen, wie Sie eine ähnliche Funktionalität in Go erreichen können.
Go ist keine traditionelle objektorientierte Sprache. Es verfolgt einen anderen Ansatz und verwendet:
Im Gegensatz zu objektorientierten Sprachen unterstützt Go kein Methodenüberschreiben oder virtuelle Methoden. Dadurch kann Go ein höheres Maß an Typsicherheit aufrechterhalten.
Um in Go ein polymorphismusähnliches Verhalten zu erreichen, können wir die folgenden Techniken anwenden:
Beispiel:
package main
import "fmt"
// Common interface
type Foo interface {
printFoo()
}
// Derived type with unique implementation
type FooImpl struct{}
func (f FooImpl) printFoo() {
fmt.Println("Print Foo Impl")
}
// Derived type composed using the common interface
type Bar struct {
FooImpl
}
// Function returning the common interface
func getFoo() Foo {
return Bar{}
}
func main() {
fmt.Println("Hello, playground")
b := getFoo()
b.printFoo()
}
In diesem Beispiel ist Foo die gemeinsame Schnittstelle, FooImpl ist der abgeleitete Typ mit seiner eigenen Implementierung und Bar ist ein abgeleiteter Typ, der mit FooImpl erstellt wurde. Die Funktion getFoo() gibt eine Instanz der Foo-Schnittstelle zurück und ermöglicht es uns, verschiedene abgeleitete Typen als einen Schnittstellentyp zu behandeln.
Dieser Ansatz stellt eine Form von Polymorphismus in Go bereit, indem er es uns ermöglicht, verschiedene abgeleitete Typen als Instanzen zu behandeln einer gemeinsamen Schnittstelle.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3