迭代不同类型的多个数组的最佳方法
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 Parent
s?
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
?
我刚开始学习Go,我来自OOP。 p>
因此,举例来说,假设我有三个类似的结构: p>
type父结构{
}
type Foo结构{
* Parent
}
类型Bar结构{
* Parent
}
code> pre>
Foo和Bar结构都扩展了Parent。 如果我有一个 Foo code>的数组和一个 Bar code>的数组,是否有一种方法可以将它们合并为一个单独的 Parent数组/切片 code> s? p>
如果不是,那么,如果我知道我将仅访问从 Parent ? p>
div>
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
.