Data structures 理解go嵌套结构

Data structures 理解go嵌套结构,data-structures,go,Data Structures,Go,我试图理解go中的嵌套结构,所以我做了一个小测试:() 那么,最后两行是如何工作的,以及为什么工作的?它们是一样的吗?我应该用哪一种?它们是一样的。见: 对于类型为T或*T的值x,其中T不是指针或接口类型,x.f表示T中最浅深度的字段或方法,其中存在这样的f。如果没有一个深度最浅的f,则选择器表达式是非法的 请注意,这意味着如果类型b在同一深度上嵌入两个具有相同字段的类型,则b.a是非法的: type A1 struct{ a string } type A2 struct{ a string

我试图理解go中的嵌套结构,所以我做了一个小测试:()

那么,最后两行是如何工作的,以及为什么工作的?它们是一样的吗?我应该用哪一种?

它们是一样的。见:

对于类型为
T
*T
的值
x
,其中
T
不是指针或接口类型,
x.f
表示
T
中最浅深度的字段或方法,其中存在这样的
f
。如果没有一个深度最浅的
f
,则选择器表达式是非法的

请注意,这意味着如果类型
b
在同一深度上嵌入两个具有相同字段的类型,则
b.a
是非法的:

type A1 struct{ a string }
type A2 struct{ a string }
type B struct {
    A1
    A2
}

// ...
b := B{A1{"a1"}, A2{"a2"}}
fmt.Println(b.a) // Error: ambiguous selector b.a
操场:

type A1 struct{ a string }
type A2 struct{ a string }
type B struct {
    A1
    A2
}

// ...
b := B{A1{"a1"}, A2{"a2"}}
fmt.Println(b.a) // Error: ambiguous selector b.a