首页 > 后端开发 > Golang > 如何使用嵌入或空接口在 Go 中惯用地创建复杂的结构层次结构?

如何使用嵌入或空接口在 Go 中惯用地创建复杂的结构层次结构?

Susan Sarandon
发布: 2025-01-01 14:42:12
原创
227 人浏览过

How to Idiomatically Create a Complex Hierarchy of Structs in Go Using Embedding or Empty Interfaces?

在 Go 中创建复杂结构体层次结构的惯用方法

在设计结构体层次结构时,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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板