Go语言中的结构体与方法详解
1. 结构体嵌套与冲突命名规则
在Go语言里,结构体嵌套是一种常见的操作。例如下面的代码:
type A struct {
ax, ay int
}
type B struct {
A
bx, by float32
}
func main() {
b := B{A{1, 2}, 3.0, 4.0}
fmt.Println(b.ax, b.ay, b.bx, b.by)
fmt.Println(b.A)
}
输出结果为:
1 2 3 4
{1 2}
当结构体中存在冲突命名时,有以下规则:
- 外层名称隐藏内层名称 :这为覆盖字段或方法提供了途径。
- 同一层级出现相同名称 :若程序使用该名称则会报错。若未使用,则无影响。且没有规则来解决这种歧义,必须进行修正。
下面是具体示例:
type A struct { a int }
type B struct { a, b int }
type C struct { A; B }
var c C;
当使用 c.a 时会报错,因为不清楚指的是 c.A.a 还是 c.B.a ,编译器错误信息为: a
超级会员免费看
订阅专栏 解锁全文
1136

被折叠的 条评论
为什么被折叠?



