亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

io.TeeReader 和 io.Copy 有什么區別?

io.TeeReader 和 io.Copy 有什么區別?

Go
拉風的咖菲貓 2022-11-23 15:57:04
io.TeeReader并且io.Copy都從讀者那里讀取并寫入作家。有什么區別?
查看完整描述

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試試這個。



查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號