Golang-Methode mit Zeigerempfänger [Duplikat]
Problem:
In Go, wann Beim Erstellen einer Methode mit einem Zeigerempfänger und beim Implementieren einer Schnittstelle kann der folgende Fehler auftreten auftreten:
cannot use obj (type Implementation) as type IFace in return argument: Implementation does not implement IFace (GetSomeField method has pointer receiver)
Antwort:
Um diesen Fehler zu beheben, stellen Sie sicher, dass der Zeiger auf die Struktur die Schnittstelle implementiert. Dadurch kann die Methode die Felder der tatsächlichen Instanz ändern, ohne eine Kopie zu erstellen.
Codeänderung:
Ersetzen Sie die fehlerhafte Zeile durch:
return &obj
Erklärung:
Durch die Rückgabe eines Zeigers auf die Struktur wird die Schnittstelle implementiert während die Methode die tatsächliche Instanz ändern kann.
Beispiel (geändert):
package main import ( "fmt" ) type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
Durch die Verwendung eines Zeigerempfängers und die Sicherstellung, dass der Zeiger die Schnittstelle implementiert, können Sie kann die tatsächliche Instanz der Struktur erfolgreich ändern und gleichzeitig die erforderlichen Methoden implementieren.
Das obige ist der detaillierte Inhalt vonWarum kann meine Go-Methode mit einem Zeigerempfänger keine Schnittstelle implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!