Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在Go中,如何将bson字节[]数据解组到结构数组中?_Database_Go_Struct_Bson - Fatal编程技术网

Database 在Go中,如何将bson字节[]数据解组到结构数组中?

Database 在Go中,如何将bson字节[]数据解组到结构数组中?,database,go,struct,bson,Database,Go,Struct,Bson,当结构数组被传递到接口{}参数时,将数据解压到结构数组中的最佳方法是什么 出于演示目的,在下面的代码中,我使用inStructArr上的bson.marshall()来获取数据的byte[]类型。这样我就可以使用bson.Unmarshal(…)将管道导入外部结构阵列 import "gopkg.in/mgo.v2/bson" type User struct { Name string } func DecodeArrData(inStructArr, outStructArr i

当结构数组被传递到
接口{}
参数时,
将数据解压到结构数组中的最佳方法是什么

出于演示目的,在下面的代码中,我使用
inStructArr
上的
bson.marshall()
来获取数据的
byte[]
类型。这样我就可以使用
bson.Unmarshal(…)
将管道导入
外部结构阵列

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

type User struct {
    Name string
}

func DecodeArrData(inStructArr, outStructArr interface{}) {
    inStructArrData, _ := bson.Marshal(inStructArr)
    bson.Unmarshal(inStructArrData, outStructArr) // <-- Error happens here
    // What's the right way of accomplishing this?
}

func Main() {
    outUsers := &[]User{}
    inUsers := []User{User{"A"}, User{"B"}}

    DecodeArrData(inUsers, outUsers)
}
导入“gopkg.in/mgo.v2/bson” 类型用户结构{ 名称字符串 } func DECODARRDATA(指令arr、外结构arr接口{}){ inStructArrData,u:=bson.Marshal(inStructArr)
bson.Unmarshal(inStructArrData,outStructArr)/的
Marshal
Unmarshal
函数用于bson文档,而不是bson数组

将切片包装在结构中,以提供包所需的文档:

func DecodeArrData(inStructArr, outStructArr interface{}) error {
    in := struct{ Data interface{} }{Data: inStructArr}
    inStructArrData, err := bson.Marshal(in)
    if err != nil {
        return err
    }
    var out struct{ Data bson.Raw }
    if err := bson.Unmarshal(inStructArrData, &out); err != nil {
        return err
    }
    return out.Data.Unmarshal(outStructArr)
}
如果您愿意利用
封送
函数的未记录功能,并向应用程序添加一些BSON格式知识,那么可以省略包装器

封送
的未记录功能是将片编码为BSON数组。BSON数组可以使用一个值进行解码,该值的种类设置为数组的BSON代码(值4),数据设置为数组数据:

func DecodeArrData(inStructArr, outStructArr interface{}) error {
    inStructArrData, err := bson.Marshal(inStructArr)
    if err != nil {
        return err
    }
    raw := bson.Raw{Kind: 4, Data: inStructArrData}
    return raw.Unmarshal(outStructArr)
}

Marshal
Unmarshal
函数用于BSON文档,而不是BSON数组

将切片包装在结构中,以提供包所需的文档:

func DecodeArrData(inStructArr, outStructArr interface{}) error {
    in := struct{ Data interface{} }{Data: inStructArr}
    inStructArrData, err := bson.Marshal(in)
    if err != nil {
        return err
    }
    var out struct{ Data bson.Raw }
    if err := bson.Unmarshal(inStructArrData, &out); err != nil {
        return err
    }
    return out.Data.Unmarshal(outStructArr)
}
如果您愿意利用
封送
函数的未记录功能,并向应用程序添加一些BSON格式知识,那么可以省略包装器

封送
的未记录功能是将片编码为BSON数组。BSON数组可以使用一个值进行解码,该值的种类设置为数组的BSON代码(值4),数据设置为数组数据:

func DecodeArrData(inStructArr, outStructArr interface{}) error {
    inStructArrData, err := bson.Marshal(inStructArr)
    if err != nil {
        return err
    }
    raw := bson.Raw{Kind: 4, Data: inStructArrData}
    return raw.Unmarshal(outStructArr)
}