在 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
解决方案:
问题在于A结构体中FB方法的返回类型。 IA 接口期望 FB 返回 IB,但在实现中,它返回 *B。要纠正此问题,请修改 FB 到 IB 的返回类型,如下所示:
func (a *A) FB() IB { return a.b }
跨包共享接口:
可以在不同包中定义接口并分享它们。在这种情况下,在结构体中实现接口时,必须使用完整的包路径作为方法的返回类型。例如,如果 IA 和 IB 定义在名为 foo 的包中,并且实现在名为 bar 的包中,则声明将为:
type IA interface { FB() foo.IB }
并且实现将为:
func (a *A) FB() foo.IB { return a.b }
以上是Golang中如何实现接口方法返回接口?的详细内容。更多信息请关注PHP中文网其他相关文章!