ホームページ  >  記事  >  バックエンド開発  >  Golang で GORM を使用してカスタム セット データ型を保持するにはどうすればよいですか?

Golang で GORM を使用してカスタム セット データ型を保持するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-19 09:18:02324ブラウズ

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 をアンマーシャリングすることに注意してください。

これらのメソッドを適切に配置すると、データの永続化のためにカスタム Set データ型を GORM で効果的に使用できます。使用するデータベースの特定の要件に従って、Value() メソッドと Scan() メソッドを実装することが重要です。

以上がGolang で GORM を使用してカスタム セット データ型を保持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。