2015-06-19 70 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