Struct 嵌套结构初始化文本

Struct 嵌套结构初始化文本,struct,go,nested,literals,Struct,Go,Nested,Literals,我如何做到这一点: type A struct { MemberA string } type B struct { A A MemberB string } 编译时会给出:“结构文字中未知的B字段'MemberA'” 当我提供这样的文本结构成员值时,如何初始化MemberA(从“父”结构)?初始化时,匿名结构仅在其类型名下已知(在您的示例中是A)。 与结构关联的成员和函数仅在 实例存在 您必须提供a的有效实例才能初始化MemberA: b := B { A

我如何做到这一点:

type A struct {
    MemberA string
}

type B struct {
    A A
    MemberB string
}

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


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

初始化时,匿名结构仅在其类型名下已知(在您的示例中是
A
)。 与结构关联的成员和函数仅在 实例存在

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

b := B {
    A: A{MemberA: "test1"},
    MemberB: "test2",
}
编译器错误

结构文字中的未知B字段“MemberA”

确切地说:没有
成员A
,因为它仍然在
A
中,而不是
B
中。事实上
B
将永远不会有
成员A
,它将始终保持在
A
中。能够访问
MemberA

B的实例上
只是语法上的糖分。

问题在于在B中声明结构A。请指定名称和声明,然后它就可以工作了

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)
}

完美-是的,我尝试了
B{A{MemberA:“test1”},MemberB:“test2”}
但是这也不起作用-看起来你必须像上面那样对待嵌套结构。谢谢声明字段和嵌入类型是两件不同的事情。如果您指定了一个名称,那么这就是声明。当您省略名称时,这就是嵌入。你没有回答这个问题,你的回答是另一个建议。
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)
}