Définir la date par défaut lors de l'insertion d'un document avec le champ Time.Time
Dans mangouste, définir une valeur par défaut pour un champ Date est simple, mais dans Go en utilisant mgo, les choses sont un peu différentes.
Pourquoi ne pouvez-vous pas définir les valeurs par défaut pour les champs dans Go ?
Go n'autorise pas les valeurs par défaut pour les champs. Lors de leur création, ils auront la valeur nulle de leur type.
Solution 1 : Fonction de type constructeur
Une approche consiste à créer une fonction de type constructeur qui initialise le champ CreatedAt. Cependant, il ne gère pas les cas où l'horodatage doit correspondre à l'horodatage de la base de données.
Solution 2 : logique de marshaling personnalisée
Une meilleure solution consiste à implémenter un bson personnalisé. Logique du getter.
GetBSON() Fonction
La fonction GetBSON() dans l'implémentation Go fournit une valeur à enregistrer. Dans ce cas, nous souhaitons définir le champ CreatedAt sur l'heure actuelle avant de sauvegarder.
func (u *User) GetBSON() (interface{}, error) { u.CreatedAt = time.Now() type my *User return my(u), nil }
Création d'un nouveau type
Notez qu'un nouveau type, mon , est créé et renvoyé pour éviter une récursion sans fin.
Gestion des éléments existants Records
L'ajout d'une vérification garantit que le champ CreatedAt n'est défini que s'il s'agit de la valeur zéro, empêchant ainsi l'écrasement des enregistrements existants :
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!