在Go 中使用介面實作常用方法
在Go 中,介面提供了一種機制,讓不同型別實作同一組方法,允許為了程式碼中的多態性。然而,有時您可能會遇到這樣的情況:您希望兩種不同的類型實作一個通用方法,但又避免冗餘程式碼。
考慮以下場景:
type First struct { str string } type Second struct { str string } type A interface { PrintStr() }
實作PrintStr 方法對於First 和Second 結構體,您通常會編寫以下單獨的方法:
func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
雖然此方法有效,但可能會導致程式碼重複如果您有多種類型需要實現相同的方法。為了克服這個問題,Go 提供了一種優雅的解決方案,稱為類型嵌入。
類型嵌入
類型嵌入可讓您透過將現有類型嵌入到新類型中來組合新類型。在這種情況下,我們可以建立一個包含公共 str 欄位和 PrintStr 方法的基本類型。
type WithString struct { str string } func (w WithString) PrintStr() { fmt.Print(w.str) }
現在,我們可以將WithString 類型嵌入到我們的First 和Second 結構中:
type First struct { WithString } type Second struct { WithString }
透過這樣做,First 和Second 結構都從嵌入的WithString 類型繼承PrintStr 方法。這樣就不需要為每個結構體實作單獨的方法。
範例
以下範例說明如何使用類型嵌入為兩種不同類型實作通用方法:
package main import "fmt" type WithString struct { str string } func (w WithString) PrintStr() { fmt.Print(w.str) } type First struct { WithString } type Second struct { WithString } func main() { a := First{ WithString: WithString{ str: "foo", }, } a.PrintStr() // Outputs: foo }
這種方法可讓您維護通用方法的單一實現,同時允許它被使用不同類型,提高程式碼復用性,減少程式碼重複。
以上是在 Go 中為不同類型實作通用方法時如何重複使用程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!