首页 > 后端开发 > Golang > Go中如何使用组合实现多态?

Go中如何使用组合实现多态?

Susan Sarandon
发布: 2024-11-21 10:42:14
原创
601 人浏览过

How to Achieve Polymorphism in Go Using Composition?

理解 Go 中的多态性:基于组合的方法

在 Go 中,与面向对象语言不同,多态性是通过接口实现的。当尝试实现多态性时,重要的是要避免组合的“基”类/类型的概念。

考虑以下问题:

您有一个包含交易字段和两个字段的 BaseTX 结构体特殊类型:RewardTX 和AllowanceTX。后者需要一个额外的 AddField。此外,还有一个函数logicAndSaveTX可以在序列化和保存对象之前执行某些逻辑。

但是,在您当前的实现中,AddField属性未被识别。

而不是依赖于继承,更符合 Go 习惯的方法是使用组合。元数据结构可以包含RewardTX和AllowanceTX使用的共享字段。然后,每个结构体都可以实现自己的logicAndSaveTX方法:

func (tx RewardTX) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
    // ...
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Logic on Metadata fields
    tx.Field1 = "overwritten"
    tx.Field2 = "logic done"
    tx.AddField = "more stuff"
    // ...
}
登录后复制

通过将行为(方法)封装在每种类型中,您可以避免尝试将操作从一种类型应用到另一种类型的陷阱。相反,您可以设计清晰且可维护的代码,对您需要管理的特定类型进行操作。

以上是Go中如何使用组合实现多态?的详细内容。更多信息请关注PHP中文网其他相关文章!

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