ホームページ > バックエンド開発 > Golang > Go から MongoDB にアクセスするときに日付変換を処理するにはどうすればよいですか?

Go から MongoDB にアクセスするときに日付変換を処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-23 11:00:56
オリジナル
540 人が閲覧しました

How to Handle Date Conversions When Accessing MongoDB from Go?

Go から MongoDB へのアクセス: 日付の操作

Go から MongoDB にアクセスする場合、次のように格納された日付の処理など、データ型を変換する必要がある状況が発生することがあります。 MongoDB 内の文字列ですが、Go time.Time オブジェクトとして必要です。これに対処する方法は次のとおりです。

カスタム マーシャル/アンマーシャル ロジック

MongoDB と Go の間のマーシャリング/アンマーシャリング中に型変換を処理するには、bson.Getter インターフェイスと bson.Setter インターフェイスを使用してカスタム ロジックを実装します。

clientConfigData のカスタマイズ

まず、拡張します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
}
ログイン後にコピー

説明

  • SetBSON(): EndDateStr フィールドを解析し、EndDate フィールドを time.Time として設定します。
  • GetBSON(): 変換しますEndDate を指定された形式の文字列に変換する前に

スタック オーバーフローを回避する

スタック オーバーフローを回避するには、両方のメソッド内で新しい中間 my 型を作成し、無限の再帰なしで変換できるようにします。

このカスタム マーシャリングまた、アンマーシャリング ロジックにより、Go から MongoDB にアクセスするときに文字列と time.Time 形式の間で日付を変換できます。

以上がGo から MongoDB にアクセスするときに日付変換を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート