Heim > Backend-Entwicklung > Golang > Warum kann meine Go-Methode mit einem Zeigerempfänger keine Schnittstelle implementieren?

Warum kann meine Go-Methode mit einem Zeigerempfänger keine Schnittstelle implementieren?

Barbara Streisand
Freigeben: 2024-12-13 15:47:11
Original
503 Leute haben es durchsucht

Why Does My Go Method with a Pointer Receiver Fail to Implement an Interface?

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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())
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage