Maison > développement back-end > Golang > le corps du texte

Comment puis-je définir un horodatage actuel par défaut pour un champ de date dans Mongoose à l'aide de Go ?

Susan Sarandon
Libérer: 2024-11-25 10:10:47
original
777 Les gens l'ont consulté

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

Date personnalisée par défaut avec Mgo

Dans Mongoose, il est possible de définir un schéma avec une valeur Date.now par défaut. Cependant, dans Go, les valeurs par défaut ne sont pas autorisées pour les champs, une approche différente est donc nécessaire.

Fonction constructeur

Une solution consiste à créer une fonction de type constructeur fonction, telle que NewUser(), qui définit le champ CreatedAt à l'heure actuelle :

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}
Copier après la connexion

Cependant, cette méthode n'imposera pas la création de nouveaux instances via cette fonction ou horodater l'instance lorsqu'elle est enregistrée.

Marshaling personnalisé

Une solution plus robuste consiste à implémenter une logique de marshaling personnalisée via l'interface bson.Getter. Cela permet de modifier la valeur stockée avant son enregistrement :

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
}
Copier après la connexion

Dans la méthode GetBSON(), le champ CreatedAt est mis à jour avec l'heure actuelle. Pour éviter le débordement de pile, un nouveau type, my, est introduit. Ce nouveau type n'hérite pas de l'implémentation de bson.Getter, rompant ainsi la boucle récursive.

Une vérification supplémentaire peut être ajoutée pour garantir que le champ CreatedAt n'est défini que s'il est initialement vide :

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal