33

这是我的代码:

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() 的返回类型,对吗?

4

1 回答 1

21

只是改变

func (a *A) FB() *B {
    return a.b
}

进入

func (a *A) FB() IB {
    return a.b
}

当然IB可以在另一个包中定义。因此,如果两个接口都在 package 中定义foo并且实现在 package 中bar,那么声明是

type IA interface {
    FB() IB
}

而实施是

func (a *A) FB() foo.IB {
    return a.b
}
于 2012-08-12T11:59:56.173 回答