首页 > 后端开发 > Golang > 如何在没有基本类型的情况下实现 Go 中的多态性?

如何在没有基本类型的情况下实现 Go 中的多态性?

Susan Sarandon
发布: 2024-11-17 00:31:03
原创
937 人浏览过

How to Implement Polymorphism in Go without Base Types?

理解 Go 中的多态性

在尝试解决涉及多种事务类型和共享基类型的编程问题时,您可能在实现多态性时遇到了挑战。让我们深入研究多态性的概念并解决您的具体问题。

在 Go 中,与面向对象语言不同,多态性仅限于接口。接口定义了一组可以由不同类型实现的方法。

在您的例子中,您尝试创建一个“基本”类型 BaseTX 和两个子类型 RewardTX 和AllowanceTX。与基本类型相比,这些子类型具有额外的字段。

问题的出现是因为您定义了一个在 TXapi 接口上运行的函数,logicAndSaveTX。然而,该函数的实现在 BaseTX 类型上进行操作,导致从子类型中排除了附加字段。

解决方案在于删除“基本”类型的概念。相反,将元数据视为事务之间共享的公共字段。您可以将元数据声明为单独的类型并将其嵌入到 RewardTX 和AllowanceTX 类型中。然后,每种类型都可以有自己的logicAndSaveTX方法来修改特定字段。

这是一个更新的示例:

type TXapi interface {
    logicAndSaveTX()
}

type Metadata struct {
    Field1 string
    Field2 string
}

type RewardTX struct {
    Metadata 
}

func (tx RewardTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Reward Field 1"
    tx.Field2 = "Reward Field 2"

    // Logic and save metadata shared with AllowanceTX
}

type AllowanceTX struct {
    Metadata 
    AddField string
}

func (tx AllowanceTX) logicAndSaveTX() {
    // Modify TX-specific fields
    tx.Field1 = "Allowance Field 1"
    tx.Field2 = "Allowance Field 2"
    tx.AddField = "Allowance Additional Field"

    // Logic and save metadata shared with RewardTX
}
登录后复制

通过拥抱组合并为方法定义明确的范围,您可以通过以下方式有效地实现多态性: Go 中的接口。

以上是如何在没有基本类型的情况下实现 Go 中的多态性?的详细内容。更多信息请关注PHP中文网其他相关文章!

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