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 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
.