首页 >后端开发 >Golang >我们如何在 Go 中惯用地创建复杂的结构层次结构?

我们如何在 Go 中惯用地创建复杂的结构层次结构?

Barbara Streisand
Barbara Streisand原创
2024-12-25 02:26:22515浏览

How Can We Idiomatically Create Complex Hierarchies of Structs in Go?

在 Go 中惯用地创建复杂的结构层次结构

面向对象语言(如 C)中的继承概念允许创建复杂类型层次结构。然而,Go 这种缺乏类和继承的语言在表示层次结构时提出了独特的挑战。

Go 编译器的空方法方法

在 Go 编译器中,一个类型的层次结构使用具有空方法的接口来表示。虽然 Go FAQ 建议使用这种方法来显式保证接口实现,但它可能会导致过多的空方法。

Go 的嵌入和空方法

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn