Oto mój kod:Jak wdrożyć metody interfejsu z zwracany typ jest interfejs w 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!"
}
pojawia się błąd:
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
Oto pełny kod: http://play.golang.org/p/udhsZgW3W2
I powinien edytować interfejs I modifi my A?
Co się stanie, jeśli zdefiniuję IA, IB w innym pakiecie (dzięki czemu mogę udostępnić ten interfejs), muszę zaimportować pakiet i użyć IB jako zwróconego typu A.FB(), czy to prawda?
To nie jest odpowiedź na pytanie. Problem polega na tym, że chcielibyśmy mieć interfejsy w nowym pliku bez możliwości zmiany pierwotnej definicji. – epsalon
@epsalon Jak twój problem dotyczy oryginalnego? Opisz nieco więcej. – Mue
Myślę, że pytanie @ epsalon jest całkiem trafne. Zakładając, że zarówno A, jak i B są zdefiniowane w pakiecie, który jest oddzielny i niedostępny. Jak można retrospektywnie zdefiniować interfejsy IA i IB? Przykładem tego, kiedy chcesz tego dokonać, jest próba zdefiniowania tych interfejsów w celu użycia makiet dla A i B w zupełnie innym pakiecie, bez możliwości modyfikacji oryginalnych plików, w których deklarowane są A i B. – ishaaq