首頁 > 後端開發 > Golang > 主體

在 Go 中為不同類型實作通用方法時如何重複使用程式碼?

DDD
發布: 2024-11-11 02:41:02
原創
201 人瀏覽過

How can I reuse code when implementing a common method for different types in Go?

在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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板