Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich mit Go einen aktuellen Standardzeitstempel für ein Datumsfeld in Mongoose festlegen?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-25 10:10:47773Durchsuche

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(),
    }
}

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!

Stellungnahme:
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