将值分配给父golang结构字段

时间:2015-06-19 12:10:01

标签: go

有两种情况:

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

为什么第二个工作正常,但第一个不工作?我收到编译时异常。我应该如何改变第一个工作?

1 个答案:

答案 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