Hier ist mein Code implementieren:Wie Interface-Methode mit Rückgabetyp ist eine Schnittstelle in Golang
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!"
}
Ich erhalte eine Fehlermeldung:
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
Hier ist der vollständige Code: http://play.golang.org/p/udhsZgW3W2
I sollte bearbeiten die IA Schnittstelle oder modifi meine A struct?
Was ist, wenn ich IA, IB in einem anderen Paket (damit ich diese Schnittstelle teilen kann) definieren, muss ich mein Paket importieren und die IB als zurückgegebenen Typ von A.FB() verwenden, ist es richtig?
Dies schließt nicht die Frage beantworten. Das Problem ist, dass wir die Schnittstellen in einer neuen Datei haben möchten, ohne die ursprüngliche Definition ändern zu können. – epsalon
@epsalon Wie verhält sich Ihr Problem zu dem Original? Bitte beschreibe etwas mehr. – Mue
Ich denke @ epsalon Frage ist ziemlich relevant. Angenommen, A und B sind in einem separaten Paket definiert, auf das nicht zugegriffen werden kann. Wie kann man die Schnittstellen IA und IB nachträglich definieren? Ein Beispiel dafür ist, wenn Sie versuchen, diese Schnittstellen zu definieren, um Mocks für A und B in einem komplett anderen Paket zu verwenden, ohne die ursprünglichen Dateien ändern zu können, in denen A und B deklariert sind. – ishaaq