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 サイトの他の関連記事を参照してください。