接口方法返回类型作为 Go 中的接口
问题:
实现接口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
解决方案:
解决此问题,FB方法的返回类型必须与IA接口中指定的类型匹配。因此,需要进行以下更改:
func (a *A) FB() IB { return a.b }
通过此修改,代码将成功编译,因为 FB 的返回类型现在为 IB,如 IA 接口中所定义。
其他注意事项:
如果 IA 和 IB 接口定义在单独的包中,则包含 IB 的包的导入语句必须包含在实现 FB 方法的文件中。此外,FB 的返回类型必须使用适当的包名称进行限定:
import ( "foo" // Package containing IB interface ) // Implementation in package bar func (a *A) FB() foo.IB { return a.b }
以上是为什么我的Go接口方法返回类型会导致编译错误?的详细内容。更多信息请关注PHP中文网其他相关文章!