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