我怎样才能做到这一点:

type A struct {
    MemberA string
}

type B struct {
    A
    MemberB string
}

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

给出的编译结果为:“结构文字中的未知B字段'MemberA'”

当提供像这样的文字结构成员值时,如何初始化MemberA(从“父”结构)?

最佳答案

初始化时,匿名结构仅在其类型名称下(在您的情况下为A)才知道。
与该结构关联的成员和函数仅在
实例存在。

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

b := B {
    A: A{MemberA: "test1"},
    MemberB: "test2",
}

编译错误



确切地说:没有MemberA,因为它仍然在A中,而不在B中。实际上,B永远不会有MemberA,它将始终保留在A中。能够访问MemberAB实例上的语法只是糖。

08-25 04:49