Go 介面欄位:資料存取研究
Go 介面以定義功能而非資料而聞名。雖然可以在介面中指定方法,但不能直接聲明欄位。
type Giver interface { Give() int64 }
這行為提出了一個問題:是否可以定義一個表示資料的介面。雖然不可能直接實現,但有一種涉及嵌入式結構和 GetPerson() 方法的解決方法。
type PersonProvider interface { GetPerson() *Person } type Person struct { Name string Age int64 } type Bob struct { FavoriteNumber int64 Person }
透過定義指定 GetPerson() 方法的接口,可以有效地將資料公開給以下函數:旨在使用該介面。
func DoBirthday(pp PersonProvider) { pers := pp.GetPerson() pers.Age += 1 }
但是,值得注意的是,此方法並不能消除對資料的直接存取。它僅提供可用於特定目的的抽象層。
優點和缺點:平衡的視角
雖然此解決方法可能是一種有用的技術,但它是權衡利弊至關重要
優點:
缺點:
最終,是否使用此技術的決定取決於特定的用例和未來更改的可能性。如果資料的暴露很可能會使未來的實作變得複雜,那麼使用 getter/setter 方法就變得更加引人注目。
但是,如果該介面僅在單一專案中使用且資料保持相對穩定,那麼直接暴露資料而不需要抽象層可能會更簡單、更有效率。
以上是Go介面能有效表示資料嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!