gpt4 book ai didi

go - 对于大内容,go io.copy 函数中的错误一致

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:38 27 4
gpt4 key购买 nike

这个工作始终如一。

    _, err = io.Copy(out, resp.Body)
if err != nil {
ErrLog.Fatal(err)
}

对于大型响应 (MB),此错误给出了非常一致的错误(下载内容的最后一个字节被遗漏了,在我的例子中是 json 响应中的结束 ]) .

    if _, err := io.Copy(out, resp.Body); err != nil {
ErrLog.Fatal(err)
}

来自 the examples on the official golang blog ,看起来这应该是有效的语法。

编辑:更多细节和上下文

这是我在第二版代码中遇到的错误(更紧凑的错误处理)

ERROR: 2015/08/05 08:09:31 pull.go:257: unexpected end of JSON input

来自另一个函数中的这段代码

err = json.Unmarshal(dat, &all_data)
if err != nil {
return err
}

通过查看每种情况下文件的前 10 个和最后 10 个字符,我发现了一个问题。以下是之前和之后:

# Before (with error)
START: [{"tags":[ END: ersion":1}
START: [{"_create END: "tags":[]}

# After
START: [{"tags":[ END: rsion":1}]
START: [{"_create END: tags":[]}]

文件是 15-20 Mb 的 json 字符串。

最佳答案

事实证明,问题至少部分是竞争条件的结果。

在退出函数之前,我没有在文件 out 上调用 .Close()。添加后,我没有再遇到任何问题。

为什么这导致文件的只是最后一个字节有时被丢弃对我来说是个谜。

关于go - 对于大内容,go io.copy 函数中的错误一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31832335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com