在設計結構體層次結構時,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中文網其他相關文章!