克服使用Go 介面實現不同類型方法的冗餘
在Go 中,介面提供了一種定義通用方法簽名的方法,可以由不同類型實現。雖然這允許多態性和程式碼重用,但當多種類型實作相同的介面時,它可能會導致冗餘實作。
考慮以下場景:我們有兩個結構體 First 和 Second,它們都需要實作一個介面帶有 PrintStr() 方法的 A。單獨在每個結構體中實作該方法是多餘的。
type First struct { str string } type Second struct { str string } type A interface { PrintStr() } func (f First) PrintStr() { fmt.Print(f.str) } func (s Second) PrintStr() { fmt.Print(s.str) }
克服冗餘
我們可以建立一個封裝通用的基本類型,而不是重複實作功能。然後可以將該基本類型嵌入到 First 和 Second 中,從而允許它們重複使用單一實作。
type WithString struct { str string } type First struct { WithString } type Second struct { WithString } type A interface { PrintStr() } func (w WithString) PrintStr() { fmt.Print(w.str) }
這種方法消除了冗餘並保持類型安全。基底類型 WithString 是將常見功能分組的便捷方法,可以由多種類型重複使用。
用法
要使用 PrintStr() 方法,我們只需建立 First 或 Second 的實例並嵌入 WithString 類型即可。
a := First{ WithString: WithString{ str: "foo", }, }
結論
透過利用基本類型和嵌入,我們可以簡化以下方法的實現:實現相同介面的不同類型。這種方法可以促進程式碼重複使用、減少冗餘並確保類型安全。
以上是使用Go介面時如何避免冗餘方法實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!