继承(结构体嵌入)
概念说明
Go 没有传统面向对象里的“类继承”,常见替代方式是结构体嵌入(Embedding)。
把一个结构体匿名嵌入到另一个结构体后,外层结构体可以直接访问内层字段和方法。
语法/规则
- 在结构体里直接写类型名(如
People)表示匿名嵌入。 - 外层结构体可以通过
s.Field直接访问嵌入结构体字段。 - 也可以通过完整路径访问,如
s.People.Time。 - 嵌入结构体的方法也会“提升”到外层结构体可调用。
- 如果字段或方法重名,需要使用完整路径区分。
结构体嵌入示例
| |
输出结果:
| |
常见错误
- 误把嵌入当作传统继承使用,忽略 Go 本质是组合复用。
- 字段或方法重名时不写完整路径,导致访问歧义。
- 以为外层结构体会自动覆盖内层方法行为,实际需显式定义同名方法。