ホームページ >バックエンド開発 >Golang >Go で MongoDB タイプのマーシャリング/アンマーシャリングをカスタマイズするにはどうすればよいですか?

Go で MongoDB タイプのマーシャリング/アンマーシャリングをカスタマイズするにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-15 02:05:03505ブラウズ

How to Customize Marshaling/Unmarshaling for MongoDB Types in Go?

Go で MongoDB 型のマーシャリング/アンマーシャリングをカスタマイズする

Go から MongoDB にアクセスすると、途中で値を変換する必要がある状況が発生する場合があります。マーシャリング/アンマーシャリング。 MongoDB に文字列として保存されている EndDate フィールドにアクセスする場合を考えてみましょう。ただし、それは Go の time.Time 型として必要です。

このようなシナリオに対処するには、bson を使用してカスタム マーシャリング/アンマーシャリング ロジックを実装できます。 Getter インターフェイスと bson.Setter インターフェイス。以下に段階的なガイドを示します:

  1. データ構造の拡張: bson タグで示される time.Time 型の新しいフィールドを追加して clientConfigData 型を拡張します。 "-".
type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}
  1. カスタム マーシャリング/アンマーシャリングの実装: カスタム マーシャリング/アンマーシャリングを処理する SetBSON() メソッドと GetBSON() メソッドを作成します。
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}

SetBSON() で、構造体に生の MongoDB 値を設定し、EndDateStr を time.Time に解析します。 GetBSON() で、EndDateStr を設定して戻ります。

  1. カスタム マーシャリング/アンマーシャリングを使用する:

ドキュメントを検索または挿入するときは、必ず使用してください。 clientConfigData 型を指定することで、カスタム マーシャリング/アンマーシャリング ロジックを実行できます。

var configRes = new(clientConfigData)
err := clientDB.
    C(clientConfigCollection).
    Find(bson.M{}).
    One(&configRes)
if err != nil {
    return nil, errors.Wrap(err, "finding config collection")
}

カスタム マーシャリング/アンマーシャリングを実装することにより、特定の型変換を必要とする MongoDB 値をシームレスに操作できます。マーシャリングとアンマーシャリングの両方をカバーするには、SetBSON() と GetBSON() の両方を忘れずに処理してください。

以上がGo で MongoDB タイプのマーシャリング/アンマーシャリングをカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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