Maison > développement back-end > Golang > Comment réaliser un marshaling BSON personnalisé dans Go, similaire au marshaling JSON personnalisé ?

Comment réaliser un marshaling BSON personnalisé dans Go, similaire au marshaling JSON personnalisé ?

Patricia Arquette
Libérer: 2024-12-01 06:44:09
original
790 Les gens l'ont consulté

How to Achieve Custom BSON Marshaling in Go, Similar to Custom JSON Marshaling?

Marshaling BSON personnalisé : équivalents pour le marshaling JSON personnalisé

Pour réaliser un marshaling BSON personnalisé, similaire au marshaling JSON personnalisé démontré avec la structure Currency , vous pouvez utiliser les interfaces bson.Getter et bson.Setter. Ces interfaces permettent de personnaliser la façon dont les valeurs sont codées et décodées au format BSON.

Implémentation d'un getter et d'un setter BSON personnalisés

La structure de devise peut être mise à jour pour implémenter le Interfaces bson.Getter et bson.Setter comme suit :

// Currency struct implements bson.Getter and bson.Setter
type Currency struct {
    value        decimal.Decimal
    currencyCode string
}

// GetBSON implements bson.Getter.
func (c Currency) GetBSON() (interface{}, error) {
    value := c.Value().Float64()
    return struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    }{
        Value:        value,
        CurrencyCode: c.CurrencyCode(),
    }, nil
}

// SetBSON implements bson.Setter.
func (c *Currency) SetBSON(raw bson.Raw) error {
    decoded := new(struct {
        Value        float64 `json:"value" bson:"value"`
        CurrencyCode string  `json:"currencyCode" bson:"currencyCode"`
    })

    bsonErr := raw.Unmarshal(decoded)
    if bsonErr != nil {
        return bsonErr
    }

    c.value = decimal.NewFromFloat(decoded.Value)
    c.currencyCode = decoded.CurrencyCode
    return nil
}
Copier après la connexion

Utilisation du marshaling BSON personnalisé dans les structures parent

Une fois la structure de devise mise à jour, similaire au marshaling JSON personnalisé, la structure Product qui intègre le Le champ Devise utilisera automatiquement le marshaling personnalisé lors de l’appel de mgo.Marshal ou bson.Encode. Le BSON de sortie contiendra les noms de champs et les valeurs de données souhaités sans avoir besoin d'une structure distincte avec les champs exportés.

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