面向对象语言(如 C)中的继承概念允许创建复杂类型层次结构。然而,Go 这种缺乏类和继承的语言在表示层次结构时提出了独特的挑战。
在 Go 编译器中,一个类型的层次结构使用具有空方法的接口来表示。虽然 Go FAQ 建议使用这种方法来显式保证接口实现,但它可能会导致过多的空方法。
Go 支持嵌入结构体和接口。引入空方法是为了确保类型显式实现接口,从而防止类型分配不兼容。
另一种方法是创建嵌入更高级别类型的结构实现。这允许自动继承方法集,减少对空方法的需求。
例如,考虑一个层次结构:
Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
对象接口和实现:
type Object interface { object() } type ObjectImpl struct {} func (o *ObjectImpl) object() {}
不可移动的接口和实现:
type Immovable interface { Object immovable() } type ImmovableImpl struct { ObjectImpl // Embedded } func (i *ImmovableImpl) immovable() {}
建筑物struct:
type Building struct { ImmovableImpl // Embedded }
通过嵌入 ImmovableImpl 结构体,Building 会自动继承 immovable() 方法,而不需要额外的空方法。这项技术最大限度地减少了所需的空方法的数量,特别是当层次结构增长或接口包含多个方法时。
以上是我们如何在 Go 中惯用地创建复杂的结构层次结构?的详细内容。更多信息请关注PHP中文网其他相关文章!