2017-07-19 140 views
2

我有這幾種:Golang嵌入式結構類型

type Value interface{} 

type NamedValue struct { 
    Name string 
    Value Value 
} 

type ErrorValue struct { 
    NamedValue 
    Error error 
} 

我可以使用使用v := NamedValue{Name: "fine", Value: 33},但我能夠使用e := ErrorValue{Name: "alpha", Value: 123, Error: err}

似乎嵌入語法是好的,但使用它不不工作?

回答

6

嵌入式類型是(未命名)字段,由非限定類型名稱引用。

Spec: Struct types:

有型,但沒有明確的字段名聲明的字段是匿名場,也稱爲嵌入式字段或結構類型的嵌入。嵌入類型必須指定爲類型名稱T或指向非接口類型名稱*T的指針,並且T本身可能不是指針類型。 非限定類型名稱用作字段名稱。

所以嘗試:

e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err} 

如果在複合字面省略字段名也可以工作:

e := ErrorValue{NamedValue{"fine", 33}, err} 

嘗試在Go Playground的例子。