Maison  >  Article  >  développement back-end  >  Comment puis-je définir une date et une heure par défaut pour un champ dans un document Go Mongoose ?

Comment puis-je définir une date et une heure par défaut pour un champ dans un document Go Mongoose ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-23 02:07:11386parcourir

How Can I Set a Default Date and Time for a Field in a Go Mongoose Document?

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!

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