Heim >Backend-Entwicklung >Golang >Warum verursacht der Rückgabetyp meiner Go-Schnittstellenmethode einen Kompilierungsfehler?
Rückgabetyp der Schnittstellenmethode als Schnittstelle in Go
Frage:
Implementierung einer Schnittstelle Eine Methode, die in Golang einen Schnittstellentyp zurückgibt, kann zu Kompilierungsfehlern führen. Betrachten Sie den folgenden Code:
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:
Um dieses Problem zu beheben , muss der Rückgabetyp der FB-Methode mit dem in der IA-Schnittstelle angegebenen Typ übereinstimmen. Daher ist die folgende Änderung erforderlich:
func (a *A) FB() IB { return a.b }
Mit dieser Änderung wird der Code erfolgreich kompiliert, da der Rückgabetyp von FB jetzt IB ist, wie in der IA-Schnittstelle definiert.
Zusätzliche Überlegungen:
Wenn die IA- und IB-Schnittstellen in separaten Paketen definiert sind, muss die Importanweisung für das Paket, das IB enthält, vorhanden sein in der Datei enthalten, in der die FB-Methode implementiert ist. Darüber hinaus muss der Rückgabetyp von FB mit dem entsprechenden Paketnamen qualifiziert werden:
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
Das obige ist der detaillierte Inhalt vonWarum verursacht der Rückgabetyp meiner Go-Schnittstellenmethode einen Kompilierungsfehler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!