首页 > 后端开发 > Golang > Golang中如何实现接口方法返回接口?

Golang中如何实现接口方法返回接口?

Linda Hamilton
发布: 2024-11-11 06:29:02
原创
359 人浏览过

How to Implement Interface Methods Returning Interfaces in Golang?

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板