栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

了解Go中的多态性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

了解Go中的多态性

Go不是面向对象的。 多态性围棋的形式是接口。

来自其他面向对象的语言可能很困难,因为您必须摆脱可能要继承的许多想法,例如“基础”类/类型。只需从设计思想中删除“基础”即可;您正在尝试将合成转换为继承,这只会使您陷入麻烦。

在这种情况下,也许您在这里有合理的构图理由;您有一些通用的共享字段供多种类型使用,但这不是“基本”类型。可能是“元数据”之类的东西-
考虑到您的示例非常抽象,我不能说该怎么称呼,但是您知道了。

所以也许您有:

type TXapi interface {    logicAndSaveTX()}type metadata struct {    Field1 string    Field2 string}type RewardTX struct {    metadata }func (tx RewardTX) logicAndSaveTX() {    // logic on baseTX fields; simplified:    tx.Field1 = "overwritten"    tx.Field2 = "logic done"    // here would be marshal to json and save; simplified to print object:    fmt.Printf("saved this object: %+v n", tx)}type AllowanceTX struct {    metadata     AddField string}func (tx AllowanceTX) logicAndSaveTX() {    // logic on baseTX fields; simplified:    tx.Field1 = "overwritten"    tx.Field2 = "logic done"    tx.AddField = "more stuff"    // here would be marshal to json and save; simplified to print object:    fmt.Printf("saved this object: %+v n", tx)}

如果元数据(或其他任何内容)字段的处理在所有用途上都是相同的,则也许您可以给该类型使用它自己的

logicTX
方法来填充这些字段,可以通过
logicAndSaveTX
嵌入它的结构的调用。

这里的关键是要考虑要 限制在该类型 上的类型的行为(方法),而不是将其视为能够对“子类型”进行操作。子类型不存在,并且 嵌入
在其他类型中的类型也无法在其容器上进行操作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/436329.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号