当前位置: 首页 > 面试题库 >

元帅成野牛

彭阳荣
2023-03-14
问题内容

使用gopkg.in/mgo.v2/bson,我想知道如何将interface
{}的值编组为type的值bson.Raw

该文档的bson.Raw状态:

使用这种类型的能够解组或 编组 值部分。

但我找不到会返回的Marshal函数bson.Raw

我想念什么?

我尝试做的例子:

package main

import (
    "fmt"

    "gopkg.in/mgo.v2/bson"
)

func main() {
    // How to avoid a MarshalRaw help function?
    raw, err := MarshalRaw("Hello world")
    if err != nil {
        panic(err)
    }

    fmt.Printf("%+v\n", raw)
}

func MarshalRaw(v interface{}) (*bson.Raw, error) {
    bin, err := bson.Marshal(struct{ Raw interface{} }{v})
    if err != nil {
        return nil, err
    }

    var raw struct{ Raw bson.Raw }
    err = bson.Unmarshal(bin, &raw)
    if err != nil {
        return nil, err
    }

    return &raw.Raw, nil
}

输出:

&{种类:2数据:[12 0 0 0 72 101 108 108 108 111 32 119 111 114 108 100 0]}


问题答案:

在封送和拆组时,bson.Raw均用作值。

要将an interface{}转换为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仅支持最高级别的文档,因此我们知道这是正确的。



 类似资料:
  • 问题内容: 请在此处找到代码http://play.golang.org/p/zdQ14ItNBZ 我将JSON数据保留为RawMessage,但无法将其解码。我需要将包含结构进行编组和解组,但是我希望仍然能够获取JSON字段。 码: 出: 问题答案: json.RawMessage上的方法都带有一个指针接收器,这就是为什么您不能利用它们中的任何一个的原因;您没有指针。 从执行的意义上说,这种“工

  • 问题内容: xml文件包含两个元素。除了一个元素名称外,这些元素具有相同的结构。我试图为XMLName属性设置一个值,但这没有用。 Xml: 是否可以定义一个结构使得元素名称是动态的? 问题答案: 在文档中,该字段必须为类型。 通过以下字段设置元素名称: (此外,必须导出E1-E4才能包含在XML输出中)。 游乐场示例:http://play.golang.org/p/bzSutFF9Bo

  • 问题内容: 区别在于我无法将注释添加到package- info.java,因为我们的所有JAXB类型都是从每次构建的模式中生成的。如果可能的话,我也更愿意不更改JAXB提供程序。 我想要实现的是设置一个空的String不会创建该元素,但是我需要为从许多模式中生成的所有JAXB类型设置它。有没有办法将其应用于所有生成的JAXB类中的所有String字段? 更新 我已经通过进行以下更改来设法为模式中

  • 问题内容: 在Ubuntu中运行flexget Python脚本,出现错误: 问题答案: 如果收到该错误,则说明Python模块的编译版本(.pyc文件)可能已损坏。Gentoo Linux提供了,但是在Debian中,更简单的解决方法是:删除.pyc文件。如果您不知道pyc,只需删除所有它们(以root用户身份):

  • 利用 cocos2d-x 实现一个三国战争游戏。 作者说:搜到一个开源的半成品游戏代码(游戏主体部分没有),但最高兴的是有不错的资源(没有美工引发头疼问题)。游戏虽小,地图只有一张,可玩,目测无bug(有的话请留言)。还会完善,希望做成个dota风格,外加塔防玩法的游戏。 [Code4App.com]

  • 基于各大AI厂商做的一个微信小程序。 包含功能: 人脸模块 人脸颜值检测、人脸融合(换军装等50个模板) 图像识别 菜品、车型、植物、动物、食材、手势识别 文字识别 通用OCR、银行卡、手写体文字识别 使用步骤 微信扫一扫。选择相关模块拍照或选择相册图片即可 页面截图-闪图 五官分析 新版首页 AI生活首页   后台代码    https://gitee.com/xshuai/xai  后台页面代