Maison >développement back-end >Golang >Comment implémenter un marshalling BSON personnalisé pour une structure Go ?
Dans Go, les développeurs rencontrent souvent des scénarios dans lesquels ils ont besoin de fonctionnalités de marshalling et de démarshall personnalisées pour les structures de données complexes. Lorsque vous travaillez avec BSON, le format de données binaires de MongoDB, le besoin d'un marshalling personnalisé se fait sentir. L'article présente le concept de définition du marshaling BSON personnalisé via les interfaces Getter et Setter.
Plus précisément, la question se concentre sur la façon d'écrire un marshaling BSON personnalisé pour une structure de devise qui encapsule une valeur monétaire et un code monétaire. Les méthodes MarshalJSON et UnmarshalJSON sont démontrées comme des approches efficaces pour le marshalling et le démarshalling JSON personnalisé. Cependant, trouver de la documentation sur le marshalling BSON peut être difficile.
Pour réaliser un marshalling BSON personnalisé, la structure Currency doit implémenter les interfaces bson.Getter et bson.Setter. La méthode GetBSON renvoie une représentation compatible BSON de la structure monétaire et la méthode SetBSON définit la valeur de la structure monétaire en fonction des données BSON fournies. Le code ci-dessous illustre ces implémentations :
type Currency struct { value decimal.Decimal //The actual value of the currency. currencyCode string //The ISO currency code. } // GetBSON implements bson.Getter. func (c Currency) GetBSON() (interface{}, error) { f := c.Value().Float64() return struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }{ Value: f, 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 { c.value = decimal.NewFromFloat(decoded.Value) c.currencyCode = decoded.CurrencyCode return nil } else { return bsonErr } }
En implémentant ces méthodes, les développeurs peuvent désormais utiliser la structure Currency de manière transparente avec MongoDB, permettant un marshalling et un démarshall personnalisé des données monétaires.
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!