問題陳述
在Go 中創建結構體的層次結構可能具有挑戰性,因為其缺乏顯式繼承。 Go 編譯器的 AST 實作使用空方法來表示接口,這引發了對其慣用性質和潛在複雜性的質疑。
慣用解
儘管Go 不支援傳統繼承,它具有表示層次結構的替代結構:
type Object interface { object() } type ObjectImpl struct {} func (o *ObjectImpl) object() {} type Immovable interface { Object immovable() } type ImmovableImpl struct { ObjectImpl // Embed ObjectImpl } func (o *Immovable) immovable() {} type Building struct { ImmovableImpl // Embed ImmovableImpl // Building-specific fields }
在這個方法中,Building 會自動繼承 Object 和 Immovable 的方法,而不需要明確的空方法。
減少空方法
雖然空方法對於記錄和強制執行類型約束很有用,但可以透過使用方法來減少它們嵌入:
總之,Go 中慣用的結構層次結構創建涉及仔細使用嵌入式介面和方法嵌入以建立類型關係並強制執行約束。
以上是如何在 Go 中慣用地創造層次結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!