Heim >Backend-Entwicklung >Golang >Wie kann Polymorphismus mit Settern in Go erreicht werden?

Wie kann Polymorphismus mit Settern in Go erreicht werden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-10 10:41:10888Durchsuche

How Can Polymorphism Be Achieved with Setters in Go?

Polymorphismus in Go: Das Setter-Rätsel entschlüsseln

Im Bereich der objektorientierten Programmierung ermöglicht Polymorphismus die Behandlung von Objekten verschiedener Klassen als Instanzen eines gemeinsamen Supertyps. In Go stellt sich jedoch die Frage: Existiert Polymorphismus und wenn ja, wie manifestiert er sich?

Betrachten Sie den folgenden Go-Code, in dem versucht wird, eine Schnittstelle mit Getter- und Setter-Methoden zu erstellen:

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
}

Die Setter-Methode stößt jedoch auf ein Problem: Der Empfänger dieser MyStruct ist kein Zeiger, was dazu führt, dass alle innerhalb der Methode vorgenommenen Änderungen verloren gehen, sobald sie beendet wird. Darüber hinaus würde die Festlegung des Empfängers auf *MyStruct die Kompilierung behindern.

Um dieses Problem zu beheben, verwendet eine korrigierte Version des Codes Zeiger:

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
}

Durch die Einführung von Zeigern ermöglichen wir Änderungen innerhalb der Setter-Methode, um über ihren Gültigkeitsbereich hinaus bestehen zu bleiben. Obwohl diese Technik möglicherweise keinen strikten Polymorphismus im herkömmlichen Sinne darstellt, folgt sie den soliden Go-Praktiken und bietet eine praktikable Lösung für das ursprüngliche Problem.

Das obige ist der detaillierte Inhalt vonWie kann Polymorphismus mit Settern in Go erreicht werden?. 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