首頁  >  文章  >  後端開發  >  如何有效率地為不同欄位的 Go 結構體添加共享功能?

如何有效率地為不同欄位的 Go 結構體添加共享功能?

Susan Sarandon
Susan Sarandon原創
2024-11-19 08:49:02806瀏覽

How to Efficiently Add Shared Functionality to Go Structs with Different Fields?

如何為差異化的 Go 結構增加共享功能

在 Go中,您可能會遇到需要向共享結構添加通用方法的情況某個特定的字段,例如下面的Guid字段例如:

type ModelA struct {
    Guid string `orm:"pk"`
    FiledA string
}

type ModelB struct {
    Guid string `orm:"pk"`
    FiledB string
}

傳統上,人們可能會考慮使用基本結構並將其嵌入到ModelA 和ModelB 中。然而,這種方法可能無法與 orm 庫無縫配合。

一個可行的解決方案涉及使用介面。透過定義接口,您可以聲明ModelA 和ModelB 都必須實現的通用契約:

type Savable interface {
    Save()
}

接下來,為兩個結構體實作Save() 方法:

func (a ModelA) Save() {
    // Implementation for ModelA
}

func (b ModelB) Save() {
    // Implementation for ModelB
}

現在,您可以建立一個Savable 類型的變數並將其指派給ModelA 或ModelB:

var i Savable
i = ModelA{}
i.Save()

或者,您可以使用嵌入式類型方法:

type ModelC struct {
    Guid string `orm:"pk"`
}

type ModelA struct {
    ModelC
    FiledA string
}

type ModelB struct {
    ModelC
    FiledB string
}

在這種情況下,在嵌入式ModelC 結構中定義Save() 方法:

func (c ModelC) Save() {
    // Implementation
}

雖然這種方法看起來很簡單,但重要的是請注意,o.Insert(this) 語句只會插入ModelC上定義的字段,而不是 ModelA 和 ModelB 上定義的字段。

因此,當您仍然需要明確引用嵌入類型時,建議避免使用嵌入。在這種情況下,介面方法提供了更大的靈活性。

以上是如何有效率地為不同欄位的 Go 結構體添加共享功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn