Polymorphismus in Go – Schnittstellen- und Zeigerverwendung verstehen
Polymorphismus, die Fähigkeit eines Objekts, je nach Typ unterschiedliche Verhaltensweisen anzunehmen, ist ein grundlegendes Konzept in der Programmierung. Obwohl Go Polymorphismus nicht explizit auf die gleiche Weise wie objektorientierte Sprachen unterstützt, bietet es Mechanismen, mit denen ähnliche Effekte erzielt werden können.
Betrachten Sie ein einfaches Beispiel, in dem Sie eine Schnittstelle mit Getter- und Setter-Methoden erstellen möchten. Es tritt jedoch ein Problem auf, bei dem Setter-Methoden nicht zulässig sind. Dies liegt daran, dass der Empfängertyp in Go-Funktionen (Methoden) mit dem konkreten Typ übereinstimmen muss.
Um diese Einschränkung zu beheben, führt Go Zeiger ein, die mit einem Sternchen (*) gekennzeichnet sind. Ein Zeiger auf einen Typ enthält die Speicheradresse des tatsächlichen Werts, sodass Sie diesen Wert indirekt manipulieren können.
In Ihrem Code besteht das Problem mit der Setter-Methode darin, dass diese MyStruct kein Zeiger ist. Dies bedeutet, dass alle innerhalb der Methode vorgenommenen Änderungen verloren gehen, sobald die Funktion beendet wird.
Die korrigierte Version Ihres Codes, wie in der Antwort angegeben, verwendet einen Zeigerempfänger für die Set-Methode:
func (this *MyStruct) Set(i int) { this.data = i }
Durch die Verwendung eines Zeigers kann die Set-Methode nun die tatsächliche MyStruct-Instanz ändern, auf die von der Schnittstelle verwiesen wird.
Obwohl es sich bei dieser Technik nicht ausschließlich um Polymorphismus handelt, handelt es sich bei dieser Technik zwar nicht ausschließlich um Polymorphismus, aber demonstriert die Verwendung von Schnittstellen und Zeigern, um ähnliche Ergebnisse zu erzielen. In Go definieren Schnittstellen einen Vertrag, der das Vorhandensein bestimmter Methoden in einem Typ sicherstellt, während Zeiger eine indirekte Manipulation von Werten ermöglichen und so ein flexibleres und dynamischeres Verhalten ermöglichen.
Daher veranschaulicht die Antwort effektiv, wie Schnittstellen und Zeiger funktionieren können kombiniert werden, um eine Form von Polymorphismus in Go zu erreichen, sodass Sie zusammenhängenden und wartbaren Code erstellen können, der sich an verschiedene Objekttypen anpasst.
Das obige ist der detaillierte Inhalt vonWie ermöglichen Schnittstellen und Zeiger polymorphes Verhalten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!