在具有相同字段的結構體中使用通用函數的最佳實踐
在兩個結構體擁有相同字段的情況下,最好防止定義對這些欄位進行操作的方法時會出現程式碼重複。
自訂類型作為方法接收器
建議的方法是引入一個自訂類型(例如,Version)來服務作為方法接收者。由於所有自訂類型都可以用作方法接收器,因此此技術可以建立可應用於多個結構的單一方法。
組合
一旦自訂類型被定義後,可以使用組合將其合併到結構中。這涉及在結構中嵌入自訂類型,本質上是創建一個嵌套結構。
範例
考慮以下程式碼片段:
<code class="go">type Version string func (v Version) PrintVersion() { fmt.Println("Version is", v) } type Game struct { Name string MultiplayerSupport bool Genre string Version } type ERP struct { Name string MRPSupport bool SupportedDatabases []string Version }</code>
在這裡,Version 類型充當方法接收者,由於其嵌入的Version 字段,它的PrintVersion 方法可以被Game 和ERP 結構體存取。
用法
嵌入的Version 欄位可以像任何其他欄位一樣使用和修改:
<code class="go">main() { g := Game{ "Fear Effect", false, "Action-Adventure", "1.0.0", } g.PrintVersion() // Version is 1.0.0 e := ERP{ "Logo", true, []string{"ms-sql"}, "2.0.0", } e.PrintVersion() // Version is 2.0.0 }</code>
透過採用這種方法,可以消除與重複方法相關的程式碼重複,同時保持靈活性和類型安全性。
以上是在具有共享字段的結構上實現相同的方法時如何避免程式碼重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!