理解 Go 中的多态性:揭穿常见的误解
虽然多态性是面向对象编程中的基本概念,但它在去。让我们通过解决与在代码中实现多态性相关的特定问题来澄清这个问题。
在 Go 中,多态性是通过接口实现的,接口定义了类型必须实现的一组方法。 Go 不像面向对象语言那样使用继承,而是使用组合来创建具有共享行为的类型。
在您的代码中,您尝试创建一个“基本”类型 BaseTX,其中包含不同类型的公共字段的交易。但是,应该使用组合而不是继承,因此我们将创建一个元数据结构来存储共享字段:
type Metadata struct { Field1 string Field2 string }
然后我们的事务类型将嵌入元数据:
type RewardTX struct { Metadata } type AllowanceTX struct { Metadata AddField string }
为了对这些事务类型执行常见操作,我们将为元数据定义一个logicAndSaveTX方法来处理共享的事务。逻辑:
func (tx Metadata) logicAndSaveTX() { // Logic on Metadata fields tx.Field1 = "overwritten" tx.Field2 = "logic done" }
然后为RewardTX和AllowanceTX定义自定义logicAndSaveTX方法,扩展常见行为:
func (tx RewardTX) logicAndSaveTX() { // Call Metadata's logicAndSaveTX() tx.Metadata.logicAndSaveTX() // Additional logic unique to RewardTX } func (tx AllowanceTX) logicAndSaveTX() { // Call Metadata's logicAndSaveTX() tx.Metadata.logicAndSaveTX() // Additional logic unique to AllowanceTX tx.AddField = "more stuff" }
通过将元数据组合成交易类型并为每种类型实现特定方法,我们无需依赖继承或基类即可实现所需的行为。这是通过接口和组合来处理多态性的“正确的Go方式”。
以上是如何在没有继承的情况下实现 Go 中的多态性:一个实际示例的详细内容。更多信息请关注PHP中文网其他相关文章!