2 回答
TA贡献1789条经验 获得超8个赞
bson.Raw在编组和解组时都用作值。
要将 aninterface{}转换为 a bson.Raw,首先要做的是对其进行编组,以便获得表示正在编组的任何内容的纯文档数据:
var value interface{} = bson.M{"some": "value"}
data, err := bson.Marshal(value)
if err != nil {
log.Fatal(err)
}
然后它可能有一个或多个字段解组为bson.Raw值:
var doc struct{ Some bson.Raw }
err = bson.Unmarshal(data, &doc)
if err != nil {
log.Fatal(err)
}
甚至整个文档:
var doc bson.Raw
err = bson.Unmarshal(data, &doc)
if err != nil {
log.Fatal(err)
}
如果您想要整个文档而不仅仅是一个字段,您还可以使用此快捷方式:
doc := bson.Raw{3, data}
3 常量代表bson 规范中的一个文档,它当然必须匹配提供的数据。由于 BSON 只支持顶层文档,我们知道这一定是正确的。
TA贡献1806条经验 获得超5个赞
我相信 bson.Raw 旨在用作变量的类型。
例如:(在玩)
type Bar struct {
AnInt int
AString bson.Raw
}
“AString”字段将保留为您的链接提到的 bson.Raw 结构。
如果您想部分解码嵌套结构的顶层以找出其实际类型,这将非常有用,以便您可以将其余部分解析为正确的数据类型。
请注意,以上内容未经测试,不在我目前可以实际运行的机器前。这是基于它像标准 encoding/json 包一样工作的假设。
- 2 回答
- 0 关注
- 270 浏览
添加回答
举报