嵌套的struct初始化文字

Bra*_*ody 36 struct nested literals go

我怎样才能做到这一点:

type A struct {
    MemberA string
}

type B struct {
    A
    MemberB string
}
Run Code Online (Sandbox Code Playgroud)

...

b := B {
    MemberA: "test1",
    MemberB: "test2",
}
fmt.Printf("%+v\n", b)
Run Code Online (Sandbox Code Playgroud)

编译给我:"结构文字中的未知B字段'MemberA'"

当我提供像这样的文字结构成员值时,如何初始化MemberA(来自"父"结构)?

nem*_*emo 39

初始化时,匿名结构只能在其类型名称下(在您的情况下A).与结构相关联的成员和函数仅在实例存在后导出到外部.

您必须提供一个有效的A初始化实例MemberA:

b := B {
    A: A{MemberA: "test1"},
    MemberB: "test2",
}
Run Code Online (Sandbox Code Playgroud)

编译器错误

struct literal中未知的B字段'MemberA'

确切地说:没有,MemberA因为它仍在,A而不是在B.事实上, B永远不会有MemberA,它将永远留在A.能够访问MemberA 一个实例B只是语法糖.