Wie kann ich mit Go einen aktuellen Standardzeitstempel für ein Datumsfeld in Mongoose festlegen?

Susan Sarandon
Freigeben: 2024-11-25 10:10:47
Original
776 Leute haben es durchsucht

How Can I Set a Default Current Timestamp for a Date Field in Mongoose Using Go?

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(),
    }
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage