Heim >Backend-Entwicklung >Golang >Unterstützt Go Polymorphismus: Problemumgehungen für Setter-Methoden finden?

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-25 13:27:11247Durchsuche

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
}

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
}

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

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!

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