Go 表示結構之間層次關係的方法,以Go 編譯器的AST 實作為例,圍繞著使用帶有空方法的介面。這就提出了這個方法是否真正慣用且簡單的問題。
介面實作的空方法
Go 的介面是方法簽章的集合。透過在介面中加入空方法,可以明確說明實現該介面的意圖。這對於由於設定了相容方法而未隱式實作介面的類型特別有用。
強制執行不同的型別區別
空方法在區分層次結構中的型別。例如,如果 Immovable 和 Movable 共享相同的方法集,則一種類型的物件可以指派給另一種類型的變量,違反了預期的差異。透過向每個介面添加不同的空方法,可以防止這種分配。
使用嵌入式結構減少空方法
雖然空方法可以達到其目的,但它們也可能導致導致此類方法的擴散。為了解決這個問題,可以定義自訂結構實作並將它們相互嵌入。這允許「繼承」父實現的方法,從而減少對空方法的需求。
範例實作
使用範例層次結構,我們建立一個結構體實作對於每種類型:
<br>type ObjectImpl struct {}<p>func (o *ObjectImpl) object() {}</p><p>type ImmovableImpl struct {</p><pre class="brush:php;toolbar:false">ObjectImpl
}
func (o *Immovable ) immovable() {}
型建築結構{
ImmovableImpl
}
這裡,Building 自動成為一個Immovable 對象,因為它嵌入了ImmovableImpl 結構。
結論
空方法的使用Go 的 AST 層次結構是一個約定問題,但它強調了顯式介面實作和型別區分的需要。雖然嵌入式結構可以減少空方法的數量,但方法的選擇取決於開發人員的特定要求和偏好。
以上是我們如何在 Go 中慣用地創造複雜的結構層次結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!