Ранее я публиковал этот вопрос с вопросом о написании пользовательского маршаллинга / демаршаллинга BSON в Пойдите, используя mgo. Теперь я пришел проверить это, думаю, я столкнулся с более серьезной проблемой. Все мои структуры неупорядочены до нулевых значений.
Это моя структура валюты с реализациями bson.Getter и bson.Setter:
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 bson.Marshal(struct {
Value float64 `json:"value" bson:"value"`
CurrencyCode string `json:"currencyCode" bson:"currencyCode"`
}{
Value: f,
CurrencyCode: c.currencyCode,
})
}
/*
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"`
})
fmt.Println(string(raw.Data))
bsonErr := raw.Unmarshal(decoded)
if bsonErr == nil {
fmt.Println("Debug: no error returned.")
fmt.Println(decoded)
c.value = decimal.NewFromFloat(decoded.Value)
c.currencyCode = decoded.CurrencyCode
return nil
} else {
return bsonErr
}
}
Посмотрев на необработанные данные, они правильно маршалируются, но при демаршалинге результирующая структура просто пуста. Есть идеи, где я здесь ошибаюсь? Я использовал go get gopkg.in/mgo.v2
command буквально вчера, поэтому я надеюсь, что она актуальна и подобная ошибка не будет присутствовать в «самом популярном драйвере MongoDB».