Go语言结构体嵌入字段歧义:该访问方式是否合法正确?
Go结构体嵌入字段的歧义处理
你提到的两种访问方式是合法且完全正确的。
Go语言中,当外层结构体与嵌入的结构体存在同名字段时,外层字段会优先被访问(即外层字段遮蔽嵌入结构体的同名字段):
- 直接通过
container.num访问的是外层container结构体自身定义的num字段; - 若要访问嵌入的
base结构体中的num字段,必须通过显式的嵌入结构体名称指定路径,也就是container.base.num。
可以通过以下代码验证:
package main import "fmt" type base struct { num int } type container struct { base str string num int } func main() { c := container{ base: base{num: 10}, num: 20, str: "demo", } fmt.Println(c.num) // 输出20,对应外层num fmt.Println(c.base.num) // 输出10,对应内层base的num }
内容的提问来源于stack exchange,提问作者forvaidya
相关产品推荐
相关产品推荐

