Unterstützt Go Polymorphismus: Problemumgehungen für Setter-Methoden finden?

Patricia Arquette
Freigeben: 2024-11-25 13:27:11
Original
188 Leute haben es durchsucht

Does Go Support Polymorphism: Finding Workarounds for Setter Methods?

Polymorphismus in Go: Gibt es ihn?

Polymorphismus, die Fähigkeit von Objekten verschiedener Klassen, identische Methoden zu haben, ist ein grundlegender Aspekt der objektorientierten Programmierung. In Go scheinen Setter-Methoden für Schnittstellen jedoch nicht verfügbar zu sein.

Sehen wir uns ein einfaches Beispiel an:

type MyInterfacer interface {
    Get() int
    Set(i int)
}

type MyStruct struct {
    data int
}

func (this MyStruct) Get() int {
    return this.data
}

func (this MyStruct) Set(i int) {
    this.data = i
}
Nach dem Login kopieren

Wenn dieser Code ausgeführt wird, schlägt die Set-Methode für den MyStruct-Typ fehl, weil Der Empfänger ist kein Zeiger. Alle daran vorgenommenen Änderungen gehen verloren, wenn die Funktion beendet wird.

Man könnte versuchen, dies zu beheben, indem man den Empfänger in einen Zeiger ändert:

func (this *MyStruct) Set(i int) {
    this.data = i
}
Nach dem Login kopieren

Dies würde jedoch zu einem Kompilierungsfehler führen . Schnittstellenmethoden in Go können keine Zeigerempfänger haben.

Gibt es also eine Möglichkeit, in diesem Szenario Polymorphismus zu erreichen?

Die nächstgelegene Alternative ist die Verwendung eines Schnittstellentyps und eine anonyme Struktur, die die Schnittstelle implementiert:

type MyInterfacer interface {
    Get() int
    Set(i int)
}

var mi MyInterfacer = &MyStruct{123}
fmt.Println(mi.Get()) // prints 123

mi.Set(456)
fmt.Println(mi.Get()) // prints 456
Nach dem Login kopieren

Obwohl diese Lösung kein echter Polymorphismus ist, nutzt sie eine Schnittstelle, um eine saubere und flexible Möglichkeit bereitzustellen um Objekte unterschiedlichen Typs zu manipulieren.

Das obige ist der detaillierte Inhalt vonUnterstützt Go Polymorphismus: Problemumgehungen für Setter-Methoden finden?. 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