这个一直有效。 _, 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) }从golang 官方博客上的示例来看,这应该是有效的语法。编辑:更多细节和上下文这是我在第二版代码中得到的错误(更紧凑的错误处理)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":[]}# AfterSTART: [{"tags":[ END: rsion":1}]START: [{"_create END: tags":[]}]这些文件是 15-20 Mb json 字符串。
1 回答
繁华开满天机
TA贡献1816条经验 获得超4个赞
事实证明,这个问题至少部分是由于竞争条件造成的。
在退出函数之前我没有调用.Close()
文件out
。添加后我没有再遇到任何问题。
为什么这会导致文件的最后一个字节有时被丢弃对我来说是个谜。
- 1 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消