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!