自定义bson编组/解组的工作方式几乎相同,您必须分别实现Getter和Setter接口
这样的事情应该工作:
type Currency struct { value decimal.Decimal //The actual value of the currency. currencyCode string //The ISO currency pre.}// 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 { depred := new(struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }) bsonErr := raw.Unmarshal(depred) if bsonErr == nil { c.value = decimal.NewFromFloat(depred.Value) c.currencyCode = depred.CurrencyCode return nil } else { return bsonErr }}


