首頁 > 後端開發 > Golang > 如何使用嵌入或空介面在 Go 中慣用地建立複雜的結構層次結構?

如何使用嵌入或空介面在 Go 中慣用地建立複雜的結構層次結構?

Susan Sarandon
發布: 2025-01-01 14:42:12
原創
220 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板