Go から MongoDB へのアクセス: カスタム データのマーシャリングとアンマーシャリング
Go を使用して MongoDB にアクセスすると、データベースのタイプは、Go 構造体で定義したものとは異なります。たとえば、MongoDB の日付フィールドは文字列として格納される場合がありますが、Go 構造体は time.Time 値を期待します。
これに対処するために、Go はカスタム データ マーシャリングおよびアンマーシャリング ロジックを実装する機能を提供します。このロジックをカスタマイズすると、MongoDB と Go 構造体間のデータ交換中に型変換を実行したり、特定の書式設定を適用したりできます。
カスタム ロジックを実装する 1 つの方法は、bson.Getter と bson を実装する独自の型を定義することです。 .Setter インターフェイス。これらのインターフェイスを使用すると、マーシャリングおよびアンマーシャリングのプロセスを制御できます。たとえば、 clientConfigData 型を、EndDate:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
という名前の time.Time 型の追加フィールドで拡張できます。bson:"-" タグは、EndDate フィールドを MongoDB に保持しないことを示します。
次に、カスタム マーシャリングとアンマーシャリングを処理するために GetBSON メソッドと SetBSON メソッドを実装します。
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() では、生データがカスタム タイプ my にアンマーシャリングされます。その後、EndDateStr フィールドが time.Time 値に解析され、EndDate に割り当てられます。
GetBSON() で、EndDateStr フィールドに EndDate から値が入力され、カスタム タイプ my が返されます。これは、データをマーシャリングして MongoDB に永続化する準備ができていることを示します。
このカスタム マーシャリングおよびアンマーシャリング ロジックを実装することで、MongoDB と Go 構造体の間の型の不一致を埋めることができ、MongoDB と Go 構造体の間でデータをシームレスに操作できるようになります。 2 つのプラットフォーム
以上がGo から MongoDB にアクセスするときに型の不一致を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。