猿问

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

io.TeeReader并且io.Copy都从读者那里读取并写入作家。有什么区别?



拉风的咖菲猫
浏览 138回答 1
1回答

鸿蒙传说

io.Copy()将数据从源复制io.Reader到目标io.Writer。就这样。您不会得到复制的数据,也不会返回给您。io.TeeReader()另一方面不会自动执行复制。它只是返回给你一个io.Reader,如果你从中读取,你得到的数据也将被写入io.Writer你传递给的io.TeeReader()。io.TeeReader()如果您需要将数据从读取器复制到写入器,这很有用,但您也需要数据,因为您想要检查它或对其执行计算。例如,假设您要将 an 复制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 WorldHash: 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试试这个。
随时随地看视频慕课网APP

相关分类

Go
我要回答