我该怎么做:
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(来自“父”结构)?
答案 0 :(得分:38)
初始化时,匿名结构仅在其类型名称下已知(在您的情况下为A
)。
与结构相关联的成员和函数仅在之后导出到外部
实例存在。
您必须提供A
的有效实例才能初始化MemberA
:
b := B {
A: A{MemberA: "test1"},
MemberB: "test2",
}
编译器错误
未知的B领域'会员A'在struct literal中
确切地说:没有MemberA
,因为它仍在A
而不在B
。事实上,
B
将永远不会MemberA
,它将始终保留在A
中。能够访问MemberA
在B
的实例上只是语法糖。
答案 1 :(得分:-1)
问题在于在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)
}