mongo-go-driver中的自定义UnmarshalBSON

时间:2019-05-31 19:26:24

标签: go mongo-go

每当我从数据库中获取特定类型的对象时,我都希望运行某种“挂钩”。我以为Unmarshaler接口非常适合此操作,但是...如何实现该接口而无需亲自手动解组每个字段?

我想做这样的事情:

func (t *T) UnmarshalBSON(b []byte) error {
    // Simply unmarshal `b` into `t` like it would otherwise
    bson.Unmarshal(b, t) // Obviously this won't work, it'll be an infinite loop
    // Do something here
    return nil
}

如何在不使用reflect pkg手动解组字段的情况下实现此目标?

1 个答案:

答案 0 :(得分:0)

进行其他输入。它将继承字段,但不继承方法。因此,这里没有无限循环。

func (t *T) UnmarshalBSON(b []byte) error {
    type Alias T
    bson.Unmarshal(b, (*Alias)(t))
    // Do something here
    return nil
}