
Go 中慣用的結構層次結構創建
問題陳述
在Go 中創建結構體的層次結構可能具有挑戰性,因為其缺乏顯式繼承。 Go 編譯器的 AST 實作使用空方法來表示接口,這引發了對其慣用性質和潛在複雜性的質疑。
慣用解
儘管Go 不支援傳統繼承,它具有表示層次結構的替代結構:
-
嵌入式介面:Go 中的介面是方法集。類型可以透過提供必要的方法來隱式實作介面。空方法可以明確聲明某個類型實作給定的接口,從而防止分配不相容的類型。
-
方法嵌入: 結構體可以嵌入其他結構體,繼承其方法集。這允許分層結構定義,而不需要空方法。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | type Object interface {
object()
}
type ObjectImpl struct {}
func (o *ObjectImpl) object() {}
type Immovable interface {
Object
immovable()
}
type ImmovableImpl struct {
ObjectImpl
}
func (o *Immovable) immovable() {}
type Building struct {
ImmovableImpl
}
|
登入後複製
在這個方法中,Building 會自動繼承 Object 和 Immovable 的方法,而不需要明確的空方法。
減少空方法
雖然空方法對於記錄和強制執行類型約束很有用,但可以透過使用方法來減少它們嵌入:
- 透過嵌入父介面的實作結構,這些父介面的方法被繼承。
- 這種技術減少了對顯式空方法的需求,使層次結構更加緊湊並且更容易維護。
總之,Go 中慣用的結構層次結構創建涉及仔細使用嵌入式介面和方法嵌入以建立類型關係並強制執行約束。
以上是如何在 Go 中慣用地創造層次結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!