我对 Go 关于嵌入式结构中变量“覆盖”的行为有点困惑。
第一种情况 如果一个child
结构嵌入了一个parent
包含字段的结构,我可以用orAttr
无差别地访问 Attr 的值。这是一个例子:child.Attr
child.parent.Attr
package main
import (
"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)
}
第二种情况 但是,如果子结构本身包含一个名为 的字段Attr
,则这两个字段是不同的,可以单独访问,如以下示例所示:
package main
import (
"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 中允许这种隐式行为。我原以为语言会更严格,因为它在很多方面都如此。此外,我找不到关于此的明确规范。这只是副作用还是我可以使用该功能?
HUH函数
相关分类