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!" }
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
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 }
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 }
Und die Implementierung wäre:
func (a *A) FB() foo.IB { return a.b }
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!