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 :
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
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 }
Dans SetBSON(), remplissez la structure avec la valeur brute MongoDB et analysez EndDateStr en un time.Time. Dans GetBSON(), définissez EndDateStr et retournez.
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") }
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!