我想对指针进行编码,而不是对值进行编码。当前,如果我们有一个结构:

type Order struct {
    Item           Tool
    AssociatedItem *Tool
}

编组时,两者都会内联到mongo中的Order文档中。
如果使用* Tool,我需要能够执行自己的序列化。例如,在这种情况下,我只能存储Too的ID而不是全部内容。不幸的是,mgo中的重载机制是为工具定义SetBSON()GetBSON,但它不能区分指针和非指针。

处理此问题的最佳方法是什么?

最佳答案

对“指针”使用其他类型,例如:

type SelectiveTool Tool

func (st *SelectiveTool) SetBSON(raw bson.Raw) error {
    return raw.Unmarshal(s)
}

type Order struct {
    Item           Tool
    AssociatedItem *SelectiveTool
}

10-06 05:10