为什么 Go 函数返回实现接口的结构体不满足接口返回函数字段?
Dec 05, 2024 pm 12:53 PMGo 函数类型返回的结构体与接口不兼容
问题:
在 Go 中,为什么返回实现接口的结构的函数是否不满足期望字段的类型要求返回该接口的函数?
答案:
问题在于返回结构体的 Go 函数类型与返回结构体的函数类型不能互换接口,即使该结构实现了该接口。在为结构体中的函数声明类型签名时,特定的返回类型必须与声明的类型匹配。修改工厂函数直接返回接口类型即可解决问题。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
本例中修改工厂函数返回实例myInterface 的,满足以下类型要求structToConstruct.
说明:
声明structToConstruct 类型时,我们指定factoryFunction 应该是一个返回myInterface 的函数。但是,expense.CreateInstance 函数返回*myStruct 值,该值不能直接分配给myInterface。这是因为 Go 接口提供类型安全性,返回特定结构类型(例如 *myStruct)的函数无法自动转换为返回其实现的接口类型的函数。
要使用 *myStruct value 与 myInterface,我们必须使用类型断言或通过创建包装转换的适配器函数来显式转换它:
1 2 3 4 5 |
|
以上是为什么 Go 函数返回实现接口的结构体不满足接口返回函数字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

热门文章

热门文章

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)