In Go kann beim Versuch, eine Schnittstelle mit a zu implementieren, ein Fehler auftreten Rückgabetyp, der auch eine Schnittstelle ist. Diese Frage befasst sich mit diesem Problem und bietet eine Lösung, die den Fehler behebt.
Der bereitgestellte Code demonstriert eine Schnittstellen-IA mit einer Methode FB(), von der erwartet wird, dass sie eine Schnittstellen-IB zurückgibt. Die Implementierung von FB in Struktur A gibt jedoch einen konkreten Typ *B anstelle von IB zurück.
Um diesen Fehler zu beheben, ändern Sie einfach den Rückgabetyp von FB in Struktur A so, dass er IB anstelle von *B ist:
func (a *A) FB() IB { return a.b }
Diese Änderung stellt sicher, dass A die IA-Schnittstelle korrekt implementiert und den Fehler behebt.
Die Frage fragt auch nach der Definition von Schnittstellen in separaten Paketen. Dieser Ansatz ist in Go möglich, sodass Sie Schnittstellen über verschiedene Pakete hinweg gemeinsam nutzen können. Wenn sich die Implementierung jedoch in einem anderen Paket befindet, muss in der Implementierung der vollständig qualifizierte Schnittstellenname verwendet werden.
Wenn beispielsweise IA und IB im Paket foo definiert sind und sich die Implementierung im Paket bar befindet, Die Deklaration im Paket bar wäre:
type IA interface { FB() foo.IB }
Während die Implementierung in bar wie folgt aussehen würde:
func (a *A) FB() foo.IB { return a.b }
Diese Anpassung stellt sicher, dass der Rückgabetyp von FB mit dem erwarteten Typ übereinstimmt, der im angegeben ist IA-Schnittstelle, unabhängig vom Paket, in dem die Schnittstelle definiert ist.
Das obige ist der detaillierte Inhalt vonWie implementiert man eine Schnittstelle mit einer Schnittstelle als Rückgabetyp in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!