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

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 10:10:47773parcourir

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

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
}

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
}

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!

Déclaration:
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