有两种情况:
type A struct {
A_FIELD string
}
type B struct {
A
B_FIELD string
}
func main() {
b := &B{
A_FIELD: "aaaa_field",
B_FIELD: "bbbb_field",
}
}
并且
type A struct {
A_FIELD string
}
type B struct {
A
B_FIELD string
}
func main() {
b := &B{}
b.A_FIELD = "aaaa_field"
b.B_FIELD = "bbbb_field"
fmt.Printf("Good!")
}
为什么第二个工作正常,但第一个不工作?我收到编译时异常。我应该如何改变第一个工作?
答案 0 :(得分:6)
为什么第二个工作正常,但第一个不工作?
由于
b.A_FIELD = "aaaa_field"
实际上是
b.A.A_FIELD = "aaaa_field"
变相。
我应该如何改变第一个工作?
func main() {
b := &B{
A: A{
A_FIELD: "aaaa_field",
},
B_FIELD: "bbbb_field",
}
}
您应该阅读Effective Go上的how embedding work。