Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.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
Go 解析msgpack编码的单个片段的msgpack编码片段时为空片段_Go_Gzip_Msgpack - Fatal编程技术网

Go 解析msgpack编码的单个片段的msgpack编码片段时为空片段

Go 解析msgpack编码的单个片段的msgpack编码片段时为空片段,go,gzip,msgpack,Go,Gzip,Msgpack,我试图解码来自服务器的gzip响应,该服务器包含一个msgpack数组或最终被gzip的msgpack数组 为了说明这一点,我的回答如下: GZIPMSGCack[msgpack[],msgpack[],msgpack[] 这是我到目前为止所做的,但是我得到了msgpack错误 msgpack:invalid code=3f解码数组长度,因此我得到的是空片 这个getBytes函数是我从这个 当我在python 3.7中执行相同的操作时,它运行良好: resp = requests.post(u

我试图解码来自服务器的gzip响应,该服务器包含一个msgpack数组或最终被gzip的msgpack数组

为了说明这一点,我的回答如下:

GZIPMSGCack[msgpack[],msgpack[],msgpack[]

这是我到目前为止所做的,但是我得到了msgpack错误

msgpack:invalid code=3f解码数组长度,因此我得到的是空片

这个getBytes函数是我从这个

当我在python 3.7中执行相同的操作时,它运行良好:

resp = requests.post(url, headers=headers, json=payload, stream=True)
datas = msgpack.loads(gzip.decompress(resp.raw.data))
datas = [msgpack.loads(k) for k in datas]
这里缺少什么吗???

不要使用[]接口{}类型作为解包类型,而是使用[][]字节。将根消息解组到[][]字节,然后迭代字节片的切片,并解组每个子字节片。您不需要getBytes func

这里有一些例子:

var root [][]byte
if err :=  msgpack.Unmarshal(bytesSlice, &root); err != nil {
    panic(err)
}

for _, childBytes := range root {
    var child []interface{}
    if err := msgpack.Unmarshal(childBytes, &child); err != nil {
        panic(err)
    }

    _ = child
}

非常感谢,这工作起来很有魅力,还有一个问题是,我的方法不起作用有什么具体原因吗?如果只是为了获取信息,我想先将其解组到[]接口{},然后将其转换为字节呢?实际上,您可以使用[]接口{},但转换为字节的方式应该是byts:=c.[]字节。我认为getBytes func不起作用,因为它将类型元数据和字节数据一起编码,您可以在这里阅读更多关于getBytes func使用的gob包的信息,这很有意义,是的,正如您所说的转换也起作用。
var root [][]byte
if err :=  msgpack.Unmarshal(bytesSlice, &root); err != nil {
    panic(err)
}

for _, childBytes := range root {
    var child []interface{}
    if err := msgpack.Unmarshal(childBytes, &child); err != nil {
        panic(err)
    }

    _ = child
}