1 回答

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊
我實(shí)現(xiàn)了MarshalerandUnmarshaler接口。由于 mongo 驅(qū)動(dòng)程序調(diào)用MarshalBSON并且UnmarshalBSON如果類型實(shí)現(xiàn)Marshaler并且Unmarshaler我們也最終陷入無限循環(huán)。為了避免這種情況,我們創(chuàng)建了type. 別名Golang僅繼承字段而不是方法,因此我們最終調(diào)用正常bson.Marshal和bson.Unmarshal
func (r *ReallyBig) MarshalBSON() ([]byte, error) {
type ReallyBigAlias ReallyBig
reallyBigRaw, err := getRaw(r.ReallyBigObj)
if err != nil {
return nil, err
}
r.ReallyBigRaw = reallyBigRaw
return bson.Marshal((*ReallyBigAlias)(r))
}
func (r *ReallyBig) UnmarshalBSON(data []byte) error {
type ReallyBigAlias ReallyBig
err := bson.Unmarshal(data, (*ReallyBigAlias)(r))
if err != nil {
return err
}
reallyBigProto, err := getProto(r.ReallyBigRaw)
if err != nil {
return err
}
r.ReallyBigObj = reallyBigProto
return nil
}
- 1 回答
- 0 關(guān)注
- 175 瀏覽
添加回答
舉報(bào)