doulai2573 2017-07-21 16:42
浏览 15
已采纳

迭代不同类型的多个数组的最佳方法

I just started learning Go and I come from a background of OOP.

So for example, say I have three structs like so:

type Parent struct {

}

type Foo struct {
    *Parent
}

type Bar struct {
    *Parent
}

The Foo and Bar structs both extend Parent. If I have an array of Foo's, and an array of Bar's, is there a way to merge these into a single array/slice of Parents?

If not, then what is the best way to iterate over the two arrays at once if I know I will only be accessing properties inherited from Parent?

  • 写回答

1条回答 默认 最新

  • douluan8828 2017-07-21 16:49
    关注

    Go does not support inheritance, and the only polymorphism it supports is interfaces. What you've got in the example code is called embedding, and it does not offer polymorphism; if you embed Parent in Foo, that does not let you assign a Foo-type value to a Parent-type variable or slice.

    The closest you can get to what you describe would be using interfaces. If Parent implements some interface (let's say Baz), then embedding Parent in Foo and Bar means that both will also implement that same interface. This in turn means that you can have a slice of the interface type []Baz into which you could put values of type Parent, Foo, or Bar. Note that interfaces can only specify methods, not fields, so when using values of the interface type, you'll only be able to access the methods of the interface, not any fields that might be specified in Parent, Foo, or Bar.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?