Maison >développement back-end >Golang >Comment définir une date et une heure par défaut pour l'insertion d'un document dans Go ?
Définition de la date par défaut lors de l'insertion du document avec le champ Time.Time dans Go
Dans Go, contrairement à Mongoose dans Node.js, les valeurs par défaut ne peuvent pas être affecté aux champs dans les définitions de structure. Pour obtenir le même résultat, plusieurs approches sont disponibles.
Une méthode consiste à créer une fonction de type constructeur qui instancie une nouvelle structure et définit le champ CreatedAt à l'heure actuelle. Cette fonction peut ensuite être utilisée pour créer de nouveaux utilisateurs, en garantissant que le champ est défini de manière cohérente.
func NewUser() *User { return &User{ CreatedAt: time.Now(), } }
Cependant, cette approche présente des limites car elle nécessite le strict respect de l'utilisation de cette fonction pour créer de nouveaux utilisateurs et ne capture pas l'horodatage de l'insertion du document.
Une solution plus polyvalente consiste à implémenter une logique de marshaling personnalisée en implémentant l'interface bson.Getter. La méthode GetBSON() permet de modifier la valeur stockée dans la base de données.
type User struct { CreatedAt time.Time `json:"created_at" bson:"created_at"` } func (u *User) GetBSON() (interface{}, error) { if u.CreatedAt.IsZero() { u.CreatedAt = time.Now() } type my *User return my(u), nil }
Cette méthode vérifie si le champ CreatedAt est vide et le définit à l'heure actuelle si c'est le cas. Elle évite également le débordement de pile en renvoyant un nouveau type qui n'implémente pas l'interface bson.Getter.
Cette approche garantit que le champ CreatedAt est automatiquement mis à jour à chaque fois qu'un document est enregistré, sans l'écraser si le champ contient déjà une valeur. Il offre une plus grande flexibilité et s'aligne sur le comportement attendu en matière de définition des valeurs par défaut lors de l'insertion du document.
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!