登录
首页 >  Golang >  Go问答

io.TeeReader与io.Copy之间的差异是什么?

来源:stackoverflow

时间:2024-02-11 09:54:26 361浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《io.TeeReader与io.Copy之间的差异是什么?》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

io.TeeReaderio.Copy 都从读取器读取并写入写入器。有什么区别?


正确答案


io.Copy() 将数据从源 io.reader 复制到目标 io.writer。就这样。您不会获得复制的数据,也不会返回给您。

另一方面,

io.TeeReader() 不会自动执行复制。它只是返回一个 io.reader,如果您从中读取,您获得的数据也将写入您传递给 io.teereader()io.writer

如果您需要将数据从读取器复制到写入器,但您也需要这些数据,因为您想要检查它或对其执行计算,那么 io.teereader() 非常有用。

例如,假设您要将 io.reader 复制到标准输出,但您还想计算复制内容的 md5 哈希值。你可以这样做:

s := "hello world"

r := io.teereader(strings.newreader(s), os.stdout)

h := md5.new()
if _, err := io.copy(h, r); err != nil {
    panic(err)
}

fmt.printf("\nhash: %x", h.sum(nil))

这将输出(在 Go Playground 上尝试):

hello world
hash: b10a8db164e0754105b7a99be72e3fe5

请注意,这也可以使用 io.MultiWriter() 代替 io.teereader() 来实现:

s := "Hello World"

h := md5.New()
mw := io.MultiWriter(h, os.Stdout)
if _, err := io.Copy(mw, strings.NewReader(s)); err != nil {
    panic(err)
}

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

这输出相同。在 Go Playground 上试试这个。

到这里,我们也就讲完了《io.TeeReader与io.Copy之间的差异是什么?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

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