18、Go语言中的结构体与方法详解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值