一尘不染

嵌套结构初始化文字

go

我怎样才能做到这一点:

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(从“父”结构)?


阅读 452

收藏
2020-07-02

共1个答案

一尘不染

初始化时,匿名结构仅在其类型名称下(在您的情况下A)是已知的。与该结构关联的成员和函数仅在实例存在之后才导出到外部。

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

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

编译错误

结构文字中的未知B字段’MemberA’

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

2020-07-02