Wie implementiert man Schnittstellenmethoden, die Schnittstellen in Golang zurückgeben?

Linda Hamilton
Freigeben: 2024-11-11 06:29:02
Original
320 Leute haben es durchsucht

How to Implement Interface Methods Returning Interfaces in Golang?

Implementieren einer Schnittstellenmethode, die eine Schnittstelle in Golang zurückgibt

Beim Versuch, eine Schnittstelle zu implementieren, die eine andere Schnittstelle zurückgibt, tritt bei der Rückgabe ein häufiger Fehler auf Der Typ der Methode stimmt nicht mit dem erwarteten Typ überein, der in der Schnittstelle definiert ist. Betrachten Sie den folgenden Codeausschnitt:

type IA interface {
    FB() IB
}

type IB interface {
    Bar() string
}

type A struct {
    b *B
}

func (a *A) FB() *B {
    return a.b
}

type B struct{}

func (b *B) Bar() string {
    return "Bar!"
}
Nach dem Login kopieren

Das Ausführen dieses Codes führt zu folgendem Fehler:

cannot use a (type *A) as type IA in function argument:
    *A does not implement IA (wrong type for FB method)
        have FB() *B
        want FB() IB
Nach dem Login kopieren

Lösung:

Das Problem liegt im Rückgabetyp der FB-Methode in der A-Struktur. Die IA-Schnittstelle erwartet, dass FB ein IB zurückgibt, in der Implementierung wird jedoch ein *B zurückgegeben. Um dies zu beheben, ändern Sie den Rückgabetyp von FB an IB wie folgt:

func (a *A) FB() IB {
    return a.b
}
Nach dem Login kopieren

Schnittstellen über Pakete hinweg gemeinsam nutzen:

Es ist möglich, Schnittstellen in verschiedenen Paketen zu definieren und teile sie. In solchen Fällen muss bei der Implementierung der Schnittstelle in einer Struktur der vollständige Paketpfad für den Rückgabetyp der Methode verwendet werden. Wenn IA und IB beispielsweise in einem Paket namens foo definiert sind und sich die Implementierung in einem Paket namens bar befindet, wäre die Deklaration:

type IA interface {
    FB() foo.IB
}
Nach dem Login kopieren

Und die Implementierung wäre:

func (a *A) FB() foo.IB {
    return a.b
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie implementiert man Schnittstellenmethoden, die Schnittstellen in Golang zurückgeben?. 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