Heim > Backend-Entwicklung > Golang > Warum implementiert meine Go-Struktur die Schnittstelle nicht?

Warum implementiert meine Go-Struktur die Schnittstelle nicht?

Mary-Kate Olsen
Freigeben: 2024-12-06 22:39:12
Original
414 Leute haben es durchsucht

Why Doesn't My Go Struct Implement the Interface?

Schnittstellenimplementierung erfordert übereinstimmende Methodensignaturen

In Go bestimmen Schnittstellen die Struktur einer Methode, einschließlich ihres Namens, ihrer Argumente und Rückgabewerte. Wenn eine Struktur eine Schnittstelle implementiert, muss sie sich strikt an die von der Schnittstelle angegebenen Methodensignaturen halten.

Betrachten Sie dieses Beispiel, in dem eine Struktur D und ihre Methode Connect die Schnittstelle B aufgrund von a nicht implementieren können Nichtübereinstimmung im Rückgabewert:

type A interface {
    Close()
}

type B interface {
    Connect() (A, error)
}

type C struct {
}

func (c *C) Close() {

}

type D struct {
}

func (d *D) Connect() (*C, error) { // Mismatched function signature compared to interface B's Connect method
    c := new(C)
    return c, nil
}
Nach dem Login kopieren

In diesem Fall gibt Connect in D einen Zeiger auf C und einen Fehler zurück, aber die Schnittstelle B erwartet, dass Connect eine Implementierung von A und an zurückgibt Fehler. Daher besagt der Fehler, dass die Struktur D die Schnittstelle B nicht implementiert, was die Bedeutung der Ausrichtung zwischen den Methodensignaturen hervorhebt.

cannot use d (type *D) as type B in argument to test:
*D does not implement B (wrong type for Connect method)
have Connect() (*C, error)
want Connect() (A, error)
Nach dem Login kopieren

Um dieses Problem zu beheben, stellen Sie sicher, dass die Methodensignaturen in der Strukturimplementierung übereinstimmen die Methodendeklarationen in der Schnittstelle. In diesem Szenario sollte die Connect-Methode in D geändert werden, um der B-Schnittstelle zu entsprechen:

func (d *D) Connect() (A, error) {
    c := new(C)
    return c, nil
}
Nach dem Login kopieren

Wenn sich dagegen die Methodensignatur in der Strukturimplementierung von der Schnittstelle unterscheidet, implementiert die Struktur die nicht Schnittstelle.

type Equaler interface {
    Equal(Equaler) bool
}

type T int
func (t T) Equal(u T) bool { // Argument type mismatch
    return t == u
} // does not satisfy Equaler
Nach dem Login kopieren

In diesem Beispiel sollte der Argumenttyp in Equal mit dem Schnittstellentyp Equaler und nicht mit einem anderen Typ, T, übereinstimmen, um die Schnittstelle korrekt zu implementieren.

Das obige ist der detaillierte Inhalt vonWarum implementiert meine Go-Struktur die Schnittstelle nicht?. 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