为了账号安全,请及时绑定邮箱和手机立即绑定

大内容的 go io.copy 函数中的一个错误保持一致

大内容的 go io.copy 函数中的一个错误保持一致

Go
Smart猫小萌 2021-10-25 20:23:40
这个一直有效。    _, 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。添加后我没有再遇到任何问题。

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


查看完整回答
反对 回复 2021-10-25
  • 1 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信