这个一直有效。
_, 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字符串。
答案 0 :(得分:0)
事实证明,这个问题至少部分是由于竞争条件造成的。
在退出该函数之前,我没有在文件.Close()
上调用out
。在补充说我没有再问题了。
为什么这会导致文件的最后一个字节被删除有时对我来说是一个谜。