2015-06-19 30 views
1

有两种情况:值分配给母公司golang结构字段

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

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

回答

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", 
    } 
} 

你应该阅读有效围棋how embedding work