Maison > Article > développement back-end > Comment gérer les différences de type lors de l'accès à MongoDB depuis Go ?
Accès à MongoDB depuis Go : regroupement et démarshalling de données personnalisés
En accédant à MongoDB avec Go, vous pouvez rencontrer des scénarios dans lesquels les données stockées dans le la base de données diffère en type de ce que vous avez défini dans vos structures Go. Par exemple, votre champ de date MongoDB peut être stocké sous forme de chaîne, tandis que votre structure Go attend une valeur time.Time.
Pour résoudre ce problème, Go offre la possibilité d'implémenter une logique personnalisée de marshalling et de démarshalling des données. En personnalisant cette logique, vous pouvez effectuer des conversions de types ou appliquer un formatage spécifique lors de l'échange de données entre MongoDB et vos structures Go.
Une façon d'implémenter une logique personnalisée consiste à définir vos propres types qui implémentent bson.Getter et bson. Interfaces .Setter. Ces interfaces vous permettent de contrôler le processus de marshalling et de démarshalling. Par exemple, vous pouvez étendre votre type clientConfigData avec un champ supplémentaire de type time.Time nommé EndDate:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
La balise bson:"-" indique que le champ EndDate ne doit pas être conservé dans MongoDB.
Ensuite, implémentez les méthodes GetBSON et SetBSON pour gérer le marshalling et le démarshalling personnalisés :
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 }
Dans SetBSON(), les données brutes sont désorganisées dans le type personnalisé my. Par la suite, le champ EndDateStr est analysé en une valeur time.Time et attribué à EndDate.
Dans GetBSON(), le champ EndDateStr est renseigné à partir de EndDate, puis le type personnalisé my est renvoyé. Cela indique que les données sont prêtes à être marshallées et conservées dans MongoDB.
En implémentant cette logique de marshalling et de démarshalling personnalisée, vous pouvez combler l'écart de type entre MongoDB et vos structures Go, vous permettant ainsi de manipuler de manière transparente les données entre les deux plateformes.
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!