go - mongo-go-driver 中的自定义 UnmarshalBSON

标签 go mongo-go

我希望有某种“钩子(Hook)”,只要我从数据库中获取特定类型的对象,它就会运行。我以为Unmarshaler接口(interface)非常适合这一点,但是...我如何实现该接口(interface)而不需要自己手动解码每个字段?

我想做这样的事情:

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
}

如何在不使用反射包手动解码字段的情况下实现此目的?

最佳答案

创建另一种类型。它将继承字段,但不会继承方法。因此这里没有无限循环。

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

关于go - mongo-go-driver 中的自定义 UnmarshalBSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56400734/

相关文章:

testing - 如何记录测试时间

rest - 使用/路径变量测试Chi路线

mongodb - 使用 MongoDB 按多个值进行 Golang 聚合组

mongodb - 如何使用go mongo驱动程序一起执行查找,区分和排序

mongodb - 由于超时,UpdateOne 在客户端失败,但 MongoDB 仍然处理它

具有嵌套 map golang 的结构

go - 如何解析GO中简单的最大到最小日期字符串

go - 在 Fargate 中使用 ZeroMQ Golang

mongodb - 如何为同名的嵌套字段创建文本索引

mongodb - 如何使用官方的mongo-go-driver从mongo文档中过滤字段