在具有相同字段的結構體中使用通用函數的最佳實踐
在兩個結構體擁有相同字段的情況下,最好防止定義對這些欄位進行操作的方法時會出現程式碼重複。
自訂類型作為方法接收器
建議的方法是引入一個自訂類型(例如,Version)來服務作為方法接收者。由於所有自訂類型都可以用作方法接收器,因此此技術可以建立可應用於多個結構的單一方法。
組合
一旦自訂類型被定義後,可以使用組合將其合併到結構中。這涉及在結構中嵌入自訂類型,本質上是創建一個嵌套結構。
範例
考慮以下程式碼片段:
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
}
這裡,Version 類型充當方法接收者,由於其嵌入的 Version 字段,它的 PrintVersion 方法可以被 Game 和 ERP 結構體存取。
用法
嵌入的 Version 欄位可以像任何其他欄位一樣使用和修改:
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
}
透過採用這種方法,可以消除與重複方法相關的程式碼重複,同時保持靈活性和類型安全性。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3