在尝试解决涉及多种事务类型和共享基类型的编程问题时,您可能在实现多态性时遇到了挑战。让我们深入研究多态性的概念并解决您的具体问题。
在 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中文网其他相关文章!