我對(duì) Go 關(guān)于嵌入式結(jié)構(gòu)中變量“覆蓋”的行為有點(diǎn)困惑。第一種情況?如果一個(gè)child結(jié)構(gòu)嵌入了一個(gè)parent包含字段的結(jié)構(gòu),我可以用orAttr無(wú)差別地訪問(wèn) Attr 的值。這是一個(gè)例子:child.Attrchild.parent.Attrpackage mainimport (? ? "fmt"? ? "encoding/json")type parent struct {? ? Attr? ? int `json:"attr"`}type child struct {? ? parent}func main() {? ? var c child? ? json.Unmarshal([]byte(`{"i": 1}`), &c)? ? fmt.Println(c.Attr)? ? fmt.Println(c.parent.Attr)}第二種情況?但是,如果子結(jié)構(gòu)本身包含一個(gè)名為 的字段Attr,則這兩個(gè)字段是不同的,可以單獨(dú)訪問(wèn),如以下示例所示:package mainimport (? ? "fmt"? ? "encoding/json")type parent struct {? ? Attr? ? int `json:"attr"`}type child struct {? ? parent? ? Attr? ? int}func main() {? ? var c child? ? json.Unmarshal([]byte(`{"attr": 1}`), &c)? ? fmt.Println(c.Attr)? ? fmt.Println(c.parent.Attr)}我很驚訝 golang 中允許這種隱式行為。我原以為語(yǔ)言會(huì)更嚴(yán)格,因?yàn)樗诤芏喾矫娑既绱?。此外,我找不到關(guān)于此的明確規(guī)范。這只是副作用還是我可以使用該功能?
Golang 嵌入式結(jié)構(gòu)
月關(guān)寶盒
2023-06-19 15:42:28