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!