Maison > développement back-end > Golang > le corps du texte

Comment gérer les conversions de dates lors de l'accès à MongoDB depuis Go ?

Mary-Kate Olsen
Libérer: 2024-11-23 11:00:56
original
482 Les gens l'ont consulté

How to Handle Date Conversions When Accessing MongoDB from Go?

Accéder à MongoDB depuis Go : travailler avec des dates

Lorsque vous accédez à MongoDB depuis Go, vous pouvez rencontrer des situations dans lesquelles vous devez convertir des types de données, telles que la gestion des dates stockées sous chaînes dans MongoDB mais les exigeant en tant qu'objets Go time.Time. Voici comment résoudre ce problème :

Logique de marshal/démarshalage personnalisée

Pour gérer les conversions de types lors du marshaling/unmarshaling entre MongoDB et Go, implémentez une logique personnalisée à l'aide des interfaces bson.Getter et bson.Setter.

Personnalisation de clientConfigData

Tout d'abord, étendez clientConfigData avec un champ supplémentaire EndDate de type time.Time :

type clientConfigData struct {
    SMTPAssoc  int       `bson:"smtp_assoc"`
    PlanType   string    `bson:"plan_type"`
    EndDateStr string    `bson:"end_date"`
    EndDate    time.Time `bson:"-"`
}
Copier après la connexion

Implémentation d'une logique personnalisée

Implémentation d'une logique de marshal/unmarshal personnalisée dans les méthodes SetBSON() et GetBSON() :

const endDateLayout = "2006-01-02 15:04:05"

func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) {
    type my clientConfigData
    if err = raw.Unmarshal((*my)(c)); err != nil {
        return
    }
    c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr)
    return
}

func (c *clientConfigData) GetBSON() (interface{}, error) {
    c.EndDateStr = c.EndDate.Format(endDateLayout)
    type my *clientConfigData
    return my(c), nil
}
Copier après la connexion

Explication

  • SetBSON() : analyse le champ EndDateStr, définissant le Champ EndDate sous la forme time.Time.
  • GetBSON() : convertit EndDate en chaîne au format spécifié avant de l'enregistrer.

Éviter le débordement de pile

Pour éviter le débordement de pile débordement, créez un nouveau type intermédiaire my dans les deux méthodes, permettant la conversion sans récursion sans fin.

Ce marshaling personnalisé et la logique de démarshaling vous permet de convertir les dates entre la chaîne et l'heure. Les formats d'heure lors de l'accès à MongoDB depuis Go.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal