Go から MongoDB にアクセスする場合、次のように格納された日付の処理など、データ型を変換する必要がある状況が発生することがあります。 MongoDB 内の文字列ですが、Go time.Time オブジェクトとして必要です。これに対処する方法は次のとおりです。
MongoDB と Go の間のマーシャリング/アンマーシャリング中に型変換を処理するには、bson.Getter インターフェイスと bson.Setter インターフェイスを使用してカスタム ロジックを実装します。
まず、拡張しますtime.Time 型の追加フィールド EndDate を持つ clientConfigData:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
SetBSON() および GetBSON() でのカスタム マーシャル/アンマーシャル ロジックの実装メソッド:
const endDateLayout = "2006-01-02 15:04:05" 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 }
スタック オーバーフローを回避するには、両方のメソッド内で新しい中間 my 型を作成し、無限の再帰なしで変換できるようにします。
このカスタム マーシャリングまた、アンマーシャリング ロジックにより、Go から MongoDB にアクセスするときに文字列と time.Time 形式の間で日付を変換できます。
以上がGo から MongoDB にアクセスするときに日付変換を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。