这是我的代码:
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界面或修改我的A结构?
如果我在另一个包中定义IA,IB(所以我可以共享这些接口),我必须导入我的包,并使用IB作为A.FB()的返回类型,是吗?
只是改变
func (a *A) FB() *B { return a.b }
成
func (a *A) FB() IB { return a.b }
当然可以在另一个包中定义IB.所以如果两个接口都是在包foo中定义的,并且这些实现是在package bar中的,那么声明是
type IA interface { FB() IB }
而实施是
func (a *A) FB() foo.IB { return a.b }