io.TeeReader 和io.Copy 之間的區別
io.TeeReader 和io.Copy 之間的區別在Go 中,io.TeeReader 和io.Copy 有助於從io 進行資料傳輸。 io.Writer 的讀者。雖然這兩個函數都用於此目的,但它們提供了不同的功能。
io.Copyio.Copy 是一個簡單而直接的函數,可以有效地從來源讀取器複製資料給目的地作家。它只專注於資料傳輸,不傳回任何值。
io.TeeReaderio.TeeReader 提供了更通用的方法。與 io.Copy 不同,io.TeeReader 會建立一個新的 io.Reader 來包裝原始閱讀器。當從這個新的讀取器讀取資料時,資料會同時寫入到提供的 io.Writer 中。當您需要檢查和處理複製的資料時,此功能非常有用。
用法範例為了說明差異,考慮一個我們需要從中複製資料的場景讀取器到標準輸出,同時計算複製內容的 MD5 哈希值。
r := io.TeeReader(strings.NewReader(s), os.Stdout)
h := md5.New()
if _, err := io.Copy(h, r); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
r := io.TeeReader(strings.NewReader(s),作業系統標準輸出) h := md5.New() if _, err := io.Copy(h, r); err != nil { 恐慌(err) } fmt.Printf("Hash: %x\n", h.Sum(nil))
在此範例中,io.TeeReader 允許我們同時將複製的資料列印到標準輸出並使用下列指令計算MD5 雜湊值h.Sum(nil) 函數。
io.MultiWritermw := io.MultiWriter(h, os.Stdout)
if _, err := io.Copy(mw, strings.NewReader(s)); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))
mw := io.MultiWriter(h, os.Stdout) if _, err := io.Copy(mw, strings.NewReader(s)); err != nil { 恐慌(err) } fmt.Printf("Hash: %x\n", h.Sum(nil))
io.MultiWriter 將多個寫入器組合到一個目標中,有效地允許資料同時寫入多個位置。在這種情況下,h 接收複製的資料進行雜湊計算,而 os.Stdout 顯示它。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3