Maison > développement back-end > Golang > Comment personnaliser le marshaling/unmarshaling pour les types MongoDB dans Go ?

Comment personnaliser le marshaling/unmarshaling pour les types MongoDB dans Go ?

DDD
Libérer: 2024-11-15 02:05:03
original
501 Les gens l'ont consulté

How to Customize Marshaling/Unmarshaling for MongoDB Types in Go?

Personnalisation du marshaling/unmarshaling pour les types MongoDB dans Go

Lorsque vous accédez à MongoDB depuis Go, vous pouvez rencontrer des situations où les valeurs doivent être transformées pendant marshaling/unmarshaling. Prenons le cas de l'accès au champ EndDate stocké sous forme de chaîne dans MongoDB, mais vous en avez besoin en tant que type Go time.Time.

Pour résoudre de tels scénarios, vous pouvez implémenter une logique de marshaling/unmarshaling personnalisée à l'aide du bson. Interfaces Getter et bson.Setter. Voici un guide étape par étape :

  1. Étendez la structure des données : Étendez le type clientConfigData en ajoutant un nouveau champ de type time.Time, indiqué par une balise bson de "-".
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
  1. Implémentez le marshaling/unmarshaling personnalisé : Créez les méthodes SetBSON() et GetBSON() pour gérer le marshaling/unmarshaling personnalisé.
const endDateLayout = "2006-01-02 15:04:05" // Specify your preferred date layout

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

Dans SetBSON(), remplissez la structure avec la valeur brute MongoDB et analysez EndDateStr en un time.Time. Dans GetBSON(), définissez EndDateStr et retournez.

  1. Utiliser le marshaling/unmarshaling personnalisé :

Lors de la recherche ou de l'insertion de documents, n'oubliez pas d'utiliser la logique de marshaling/unmarshaling personnalisée en spécifiant le type clientConfigData.

var configRes = new(clientConfigData)
err := clientDB.
    C(clientConfigCollection).
    Find(bson.M{}).
    One(&configRes)
if err != nil {
    return nil, errors.Wrap(err, "finding config collection")
}
Copier après la connexion

En implémentant un marshaling/unmarshaling personnalisé, vous pouvez travailler de manière transparente avec les valeurs MongoDB qui nécessitent des conversions de type spécifiques. N'oubliez pas de gérer à la fois SetBSON() et GetBSON() pour couvrir à la fois le marshalling et le démarshalling.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal