Heim >Backend-Entwicklung >Golang >Warum kann eine Go-Struktur mit einer Zeigerempfängermethode eine Schnittstelle nicht erfüllen?
Typen von Go-Strukturmethoden, die eine Schnittstelle erfüllen
In Go können Strukturen Methoden mit unterschiedlichen Empfängertypen (Wert oder Zeiger) haben. Während eine Methode mit einem Wertempfänger entweder für einen Wert oder einen Zeiger der Struktur aufgerufen werden kann, erfordert eine Methode mit einem Zeigerempfänger einen Zeigerempfänger.
Betrachten Sie das bereitgestellte Beispiel:
type greeter interface { hello() goodbye() } type tourGuide struct { name string } func (t tourGuide) hello() { fmt.Println("Hello", t.name) } func (t *tourGuide) goodbye() { fmt.Println("Goodbye", t.name) }
Wir können die Methoden von tourGuide sowohl mit einem Wert t1 als auch mit einem Zeiger t2 aufrufen. Bei der Implementierung von Schnittstellen ist jedoch die Zuweisung eines tourGuide-Werts zu einer Greeter-Schnittstellenvariablen nicht zulässig.
Der Grund dafür ist, dass wenn eine Methode einen Zeigerempfänger hat, nur ein Zeigerwert als Empfänger verwendet werden kann. Da Schnittstellenwerte Kopien der verpackten Werte sind und nicht adressierbar sind, können sie nicht an Methoden mit Zeigerempfängern übergeben werden.
Diese Einschränkung verhindert potenzielle Probleme, bei denen sich über den Zeigerempfänger vorgenommene Änderungen nur auf die Kopie in der Schnittstelle auswirken würden. nicht der ursprüngliche Wert.
Damit eine Schnittstelle einen Werttyp akzeptieren kann, müssen alle ihre Methoden Wertempfänger haben. Da goodbye in unserem Beispiel einen Zeigerempfänger hat, kann tourGuide nicht dem Greeter zugewiesen werden.
Das obige ist der detaillierte Inhalt vonWarum kann eine Go-Struktur mit einer Zeigerempfängermethode eine Schnittstelle nicht erfüllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!