Lorsque vous accédez à MongoDB depuis Go, vous pouvez rencontrer des situations dans lesquelles vous devez convertir des types de données, telles que la gestion des dates stockées sous chaînes dans MongoDB mais les exigeant en tant qu'objets Go time.Time. Voici comment résoudre ce problème :
Pour gérer les conversions de types lors du marshaling/unmarshaling entre MongoDB et Go, implémentez une logique personnalisée à l'aide des interfaces bson.Getter et bson.Setter.
Tout d'abord, étendez clientConfigData avec un champ supplémentaire EndDate de type time.Time :
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
Implémentation d'une logique de marshal/unmarshal personnalisée dans les méthodes SetBSON() et GetBSON() :
const endDateLayout = "2006-01-02 15:04:05" 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 }
Pour éviter le débordement de pile débordement, créez un nouveau type intermédiaire my dans les deux méthodes, permettant la conversion sans récursion sans fin.
Ce marshaling personnalisé et la logique de démarshaling vous permet de convertir les dates entre la chaîne et l'heure. Les formats d'heure lors de l'accès à MongoDB depuis Go.
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!