1 回答

TA貢獻1865條經驗 獲得超7個贊
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 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試試這個。
- 1 回答
- 0 關注
- 157 瀏覽
添加回答
舉報