How can I do this:
type A struct {
MemberA string
}
type B struct {
A
MemberB string
}
...
b := B {
MemberA: "test1",
MemberB: "test2",
}
fmt.Printf("%+v\n", b)
Compiling that gives me: "unknown B field 'MemberA' in struct literal"
How can I initialize MemberA (from the "parent" struct) when I provide literal struct member values like this?
While initialization the anonymous struct is only known under its type name (in your case A
).
The members and functions associated with the struct are only exported to the outside after the
instance exists.
You have to supply a valid instance of A
to initialize MemberA
:
b := B {
A: A{MemberA: "test1"},
MemberB: "test2",
}
The compiler error
unknown B field 'MemberA' in struct literal
says exactly that: there's no MemberA
as it is still in A
and not in B
. In fact,
B
will never have MemberA
, it will always remain in A
. Being able to access MemberA
on an instance of B
is only syntactic sugar.
The problem is with declaring the struct A in B. Please specify the name along with declaration, then it works.
package main
import "fmt"
type A struct {
MemberA string
}
type B struct {
MemA A
MemberB string
}
func main() {
b := B{MemA: A{MemberA: "test1"}, MemberB: "test2"}
fmt.Println(b.MemberB)
}