我正在研究一個示例程序來回答這裏的另一個問題,並發現自己有些困惑,因爲下面的代碼不會編譯;複合文字和嵌入式字段
https://play.golang.org/p/wxBGcgfs1o
package main
import "fmt"
type A struct {
FName string
LName string
}
type B struct {
A
}
func (a *A) Print() {
fmt.Println(a.GetName())
}
func (a *A) GetName() string {
return a.FName
}
func (b *B) GetName() string {
return b.LName
}
func main() {
a := &A{FName:"evan", LName:"mcdonnal"}
b := &B{FName:"evan", LName:"mcdonnal"}
a.Print()
b.Print()
}
的錯誤是;
/tmp/sandbox596198095/main.go:28: unknown B field 'FName' in struct literal
/tmp/sandbox596198095/main.go:28: unknown B field 'LName' in struct literal
是否可以在靜態初始化程序中設置嵌入類型的字段值?怎麼樣?對我來說,這似乎是一個編譯器錯誤;如果我沒有在我面前的來源,並熟悉類型我會打我的頭撞牆說:「明確F名存在B編譯器說什麼!?!?!」。
快速,以搶佔典型的答案我知道最接近的工作語法是這個b := &B{A{FName:"evan", LName:"mcdonnal"}}
,但是在我看來,這種語法在概念上與嵌入相矛盾,所以如果它是唯一的選擇,我會感到失望。如果這是唯一的方法,它是Go編譯器的一個簡短的介紹,還是實際上存在一個理論上的限制,它會阻止編譯器解釋我的非工作示例中的語法?
可能重複[獲取錯誤:結構體文字中的未知字段](https://stackoverflow.com/questions/33098460/getting-error-unknown-field-in-struct-literal) –