登录
首页 >  Golang >  Go问答

如何在Go中使用 io.Copy 和 io.TeeReader?

来源:stackoverflow

时间:2024-02-24 12:36:24 192浏览 收藏

知识点掌握了,还需要不断练习才能熟练运用。下面golang学习网给大家带来一个Golang开发实战,手把手教大家学习《如何在Go中使用 io.Copy 和 io.TeeReader?》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!

问题内容

我想下载一个文件,计算哈希值并确保文件完整。

以前,我直接将 io.copyhttp.get 一起使用,然后,除非发生连接问题,否则文件将始终完整,io.copy 只会继续复制,直到 body 完全为空。现在我还必须使用 io.teereader ,如以下测试代码所示:

func main() {
    resp, _ := http.Get("https://www.example.com/file.zip")

    f, _ := os.Create("file.zip")

    h := sha256.New()

    body := io.TeeReader(resp.Body, h)
    io.Copy(f, body)

    fmt.Printf("%x\n", h.Sum(nil))

    f.Sync()
    f.Close()
}

为了简单起见,省略了错误处理。

使用上面的代码,我仍然可以确定 io.copy 将始终继续复制,直到 resp.body 为空,因此文件将完整吗?或者 io.teereader 在某些情况下可能会由于某种原因干扰,因此文件将不完整?

需要明确的是,我在测试过程中没有发现任何问题,但我对 go 没有太多经验,所以我想避免被一些很容易避免的东西咬住。


解决方案


io.TeeReader 在从读取器读取数据时向写入器写入数据。 写入时遇到的任何错误都会报告为读取错误。

在这种情况下,写入者是一个哈希,并且 hash.Hash 接口声明写入永远不会返回错误

因此,在具有哈希写入器的 TeeReader 上使用 io.Copy() 与直接读取正文一样可靠。

implementation of io.TeeReader 出奇的小。)

本篇关于《如何在Go中使用 io.Copy 和 io.TeeReader?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>