ホームページ >バックエンド開発 >Golang >Go でのドキュメント挿入時にデフォルトの日付と時刻を設定するにはどうすればよいですか?

Go でのドキュメント挿入時にデフォルトの日付と時刻を設定するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 04:15:141037ブラウズ

How to Set a Default Date and Time on Document Insertion in Go?

Go の Time.Time フィールドを使用したドキュメント挿入のデフォルト日付の設定

Go では、Node.js の Mongoose とは異なり、デフォルト値を設定できません構造体定義内のフィールドに割り当てられます。同じ結果を達成するために、複数のアプローチが利用可能です。

1 つの方法は、新しい構造体をインスタンス化し、CreatedAt フィールドを現在時刻に設定するコンストラクターのような関数を作成することです。この関数を使用して新しいユーザーを作成し、フィールドが一貫して設定されるようにすることができます。

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}

ただし、このアプローチには制限があります。新しいユーザーの作成にこの関数を使用することを厳守する必要があり、データがキャプチャされないためです。ドキュメント挿入のタイムスタンプ。

より汎用性の高いソリューションには、bson.Getter インターフェイスを実装することによるカスタム マーシャリング ロジックの実装が含まれます。 GetBSON() メソッドを使用すると、データベースに格納されている値を変更できます。

type User struct {
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
}

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}

このメソッドは、CreatedAt フィールドが空かどうかを確認し、空であれば現在の時刻に設定します。また、bson.Getter インターフェイスを実装していない新しい型を返すことで、スタック オーバーフローを回避します。

このアプローチにより、CreatedAt フィールドは、フィールドに既に含まれている場合は上書きされず、ドキュメントが保存されるたびに自動的に更新されます。値。これにより、柔軟性が向上し、ドキュメントの挿入時にデフォルト値を設定するという予期される動作と一致します。

以上がGo でのドキュメント挿入時にデフォルトの日付と時刻を設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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