ch10.5 OK

This commit is contained in:
leisore
2015-07-09 22:51:51 +08:00
parent b8f93a8b1d
commit caf6cd9d5f
2 changed files with 27 additions and 1 deletions

View File

@@ -91,8 +91,33 @@ func main() {
创建一个结构体它有一个具名的float成员2个匿名成员类型分别是int和string。通过结构体字面量新建一个结构体实例并打印它的内容。
## 10.5.3 命名冲突
当两个成员拥有相同的名字(可能是继承来的名字)时该怎么办呢?
* 外层名字会覆盖内层名字,这提供了一种重载成员或方法的方式
* 如果相同的名字在同一级别出现了两次,如果这个名字被程序使用了,将会引发一个错误(不使用没关系)。没有办法来解决这种问题引起的二义性,必须由程序员自己修正。
例子:
```go
type A struct {a int}
type B struct {a, b int}
type C struct {A; B}
var c C;
```
规则2使用c.a是错误的到底是c.A.a还是c.B.a呢会导致编译器错误*ambiguous DOT reference c.a disambiguate with either c.A.a or c.B.a*
```go
type D struct {B; b float32}
var d D;
```
规则1使用d.b是没问题的它是float32而不是B的b。如果想要内层的b可以通过d.B.b得到。
## 链接
- [目录](directory.md)
- 上一节:[10.5 带标签的结构体](10.4.md)
- 上一节:[10.4 带标签的结构体](10.4.md)
- 下一节:[10.6 方法](10.6.md)

View File

@@ -89,6 +89,7 @@
- 10.2 [使用工厂方法创建结构体实例](10.2.md)
- 10.3 [使用自定义包中的结构体](10.3.md)
- 10.4 [带标签的结构体](10.4.md)
- 10.5 [匿名成员和内嵌结构体](10.5.md)
- 第11章接口interface与反射reflection
## 第三部分Go 高级编程