Как реализовать метод интерфейса с типом возврата - это интерфейс в 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!"
}
Я получаю сообщение об ошибке:
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
Вот полный код: http://play.golang.org/p/udhsZgW3W2
Я должен отредактировать интерфейс IA или modifi A.
Что делать, если я определяю IA, IB в другом пакете (так что я могу поделиться этим интерфейсом), я должен импортировать свой пакет и использовать IB в качестве возвращаемого типа A.FB(), правильно?
Ответы
Ответ 1
Просто измените
func (a *A) FB() *B {
return a.b
}
в
func (a *A) FB() IB {
return a.b
}
Конечно, IB
может быть определен в другом пакете. Поэтому, если оба интерфейса определены в пакете foo
, а реализации находятся в пакете bar
, тогда объявление
type IA interface {
FB() IB
}
а реализация -
func (a *A) FB() foo.IB {
return a.b
}