首頁 >後端開發 >Golang >如何在 Golang 中使用 GORM 保留自訂設定資料類型?

如何在 Golang 中使用 GORM 保留自訂設定資料類型?

DDD
DDD原創
2024-11-19 09:18:02371瀏覽

How to Persist Custom Set Data Types with GORM in Golang?

使用GORM Golang 保留自訂Set 資料類型

提供的程式碼範例說明了使用GORM 程式庫保留自訂Set 資料類型的挑戰在戈蘭。自訂類型是線程不安全的,表示一組字串。當嘗試使用 GORM 將包含此 Set 類型的結構體持久化到 MySQL 時,會遇到錯誤,指示 Set 類型對於 MySQL 無效。

要解決此問題,需要在自訂中實作某些方法設定類型以啟用資料庫互動。這些方法包括:

  • Value(): 將 Set 類型轉換為資料庫相容的值,例如 JSON 編碼的字串。
  • Scan():從資料庫擷取的值填入Set類型。

透過實作這些方法,GORM函式庫可以在資料持久化期間有效地處理自訂Set類型。以下是如何為提供的threadUnsafeSet 實作這些方法的範例:

type threadUnsafeSet map[interface{}]struct{}

func (set *threadUnsafeSet) Value() (driver.Value, error) {
    return json.Marshal(set), nil
}

func (set *threadUnsafeSet) Scan(value interface{}) error {
    switch value := value.(type) {
    case []byte:
        return json.Unmarshal(value, set)
    }
    return errors.New("unrecognized value type")
}

請注意,Value() 方法將threadUnsafeSet 轉換為JSON 編碼的字串,而Scan() 方法則解組JSON字串返回threadUnsafeSet。

有了這些方法,自訂 Set 資料型別就可以有效地與 GORM 一起使用來實現資料持久化。根據所使用資料庫的具體要求來實作 Value() 和 Scan() 方法非常重要。

以上是如何在 Golang 中使用 GORM 保留自訂設定資料類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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