Benutzerdefinierter Datumsstandard mit Mgo
In Mongoose ist es möglich, ein Schema mit einem Standardwert für Date.now zu definieren. In Go sind jedoch keine Standardwerte für Felder zulässig, sodass ein anderer Ansatz erforderlich ist.
Konstruktorfunktion
Eine Lösung besteht darin, eine konstruktorähnliche Funktion zu erstellen Funktion, wie z. B. NewUser(), die das CreatedAt-Feld auf die aktuelle Zeit setzt:
func NewUser() *User { return &User{ CreatedAt: time.Now(), } }
Diese Methode erzwingt jedoch nicht die Erstellung neuer Instanzen über diese Funktion oder versehen Sie die Instanz mit einem Zeitstempel, wenn sie gespeichert wird.
Benutzerdefiniertes Marshaling
Eine robustere Lösung besteht darin, benutzerdefinierte Marshalling-Logik über die bson.Getter-Schnittstelle zu implementieren. Dies ermöglicht die Änderung des gespeicherten Werts vor dem Speichern:
type User struct { CreatedAt time.Time `json:"created_at" bson:"created_at"` } func (u *User) GetBSON() (interface{}, error) { u.CreatedAt = time.Now() type my *User return my(u), nil }
In der GetBSON()-Methode wird das CreatedAt-Feld mit der aktuellen Zeit aktualisiert. Um einen Stapelüberlauf zu vermeiden, wird ein neuer Typ, my, eingeführt. Dieser neue Typ erbt nicht die bson.Getter-Implementierung, wodurch die rekursive Schleife unterbrochen wird.
Eine zusätzliche Prüfung kann hinzugefügt werden, um sicherzustellen, dass das CreatedAt-Feld nur gesetzt wird, wenn es anfänglich leer ist:
func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Das obige ist der detaillierte Inhalt vonWie kann ich mit Go einen aktuellen Standardzeitstempel für ein Datumsfeld in Mongoose festlegen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!