gpt4 book ai didi

go - io.TeeReader 和 io.Copy 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 01:04:46 36 4
gpt4 key购买 nike

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

最佳答案

io.Copy() 从源复制数据io.Reader到目的地io.Writer .就这样。您没有得到复制的数据,也没有返回给您。

io.TeeReader() 另一方面,不会自动执行复制。它只会返回一个 io.Reader如果您从中读取,您获得的数据也将写入 io.Writer你传给 io.TeeReader() .

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 上试试这个.

关于go - io.TeeReader 和 io.Copy 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71523651/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com