Go で MongoDB 型のマーシャリング/アンマーシャリングをカスタマイズする
Go から MongoDB にアクセスすると、途中で値を変換する必要がある状況が発生する場合があります。マーシャリング/アンマーシャリング。 MongoDB に文字列として保存されている EndDate フィールドにアクセスする場合を考えてみましょう。ただし、それは Go の time.Time 型として必要です。
このようなシナリオに対処するには、bson を使用してカスタム マーシャリング/アンマーシャリング ロジックを実装できます。 Getter インターフェイスと bson.Setter インターフェイス。以下に段階的なガイドを示します:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
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 を設定して戻ります。
ドキュメントを検索または挿入するときは、必ず使用してください。 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 サイトの他の関連記事を参照してください。