在设计结构体层次结构时,Go 提供了两种组织类型关系的方法:嵌入和空接口方法。
Go 的“空方法”方法使用接口和空方法来表示类型层次结构。空方法是没有任何实现的方法;它的目的纯粹是为了标记类型满足接口。
在提供的示例中,类型 Object、Immovable、Building、Movable、Car 和 Bike 形成层次结构,以下实现使用带有空的接口方法将被认为是惯用的:
type Object interface { object() } type Immovable interface { Object immovable() } type Building struct { ... } type Mountain struct { ... } type Movable interface { Object movable() } type Car struct { ... } type Mountain struct { ... } func (*Building) object() {} func (*Mountain) object() {} func (*Car) object() {} func (*Bike) object() {} func (*Building) immovable() {} func (*Mountain) immovable() {} func (*Car) movable() {} func (*Bike) movable() {}
此方法显式记录类型关系并防止分配不兼容的types.
Go 还支持嵌入,它允许一个结构体继承另一个结构体的方法。使用嵌入,层次结构可以表示如下:
type ObjectImpl struct {} func (o *ObjectImpl) object() {} type ImmovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Immovable) immovable() {} type Building struct { *ImmovableImpl // Embed ImmovableImpl struct } type MovableImpl struct { *ObjectImpl // Embed ObjectImpl struct } func (o *Movable) movable() {} type Car struct { *MovableImpl // Embed MovableImpl struct } type Bike struct { *MovableImpl // Embed MovableImpl struct }
嵌入提供了一种替代方法,可以利用 Go 的类继承机制来减少空方法的数量。
以上是如何使用嵌入或空接口在 Go 中惯用地创建复杂的结构层次结构?的详细内容。更多信息请关注PHP中文网其他相关文章!