Go 中复杂结构层次结构的惯用实现
Go 缺乏继承和对嵌入的支持使得复杂结构层次结构的表示变得非常重要。 Go 编译器在 AST 实现中使用空方法引发了对其功效的质疑。
理解空方法
虽然不是必需的,但空方法有两个关键目的:
利用嵌入
嵌入允许一个结构体合并另一个结构体的字段和方法,从而创建一种继承形式。通过以分层方式嵌入适当的结构,我们可以减少对空方法的需求。
对象-不可移动-可移动层次结构
考虑以下层次结构:
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 Object implementation } func (i *ImmovableImpl) immovable() {}
建筑实施:
type Building struct { ImmovableImpl // Embedded Immovable implementation // Additional Building-specific fields }
可移动实现:
type Movable interface { Object movable() } type MovableImpl struct { ObjectImpl // Embedded Object implementation } func (m *MovableImpl) movable() {}
汽车实现:
type Car struct { MovableImpl // Embedded Movable implementation // Additional Car-specific fields }
用法示例:
// Building cannot be assigned to a Movable-typed variable because it does not implement the Movable interface. var movable Movable = Building{} // However, it can be assigned to an Object-typed variable because both Immovable and Movable implement Object. var object Object = Building{}
优点嵌入:
以上是嵌入如何改善 Go 中复杂结构层次结构的实现?的详细内容。更多信息请关注PHP中文网其他相关文章!