首頁 > 後端開發 > Golang > 如何在 Go 中多次讀取同一個 io.Reader ?

如何在 Go 中多次讀取同一個 io.Reader ?

Patricia Arquette
發布: 2024-12-14 12:14:11
原創
546 人瀏覽過

How Can I Read from the Same io.Reader Multiple Times in Go?

處理來自同一個io.Reader 的多次讀取

從io.Reader 流中讀取只能執行一次,因為它代表一個順序資料流。但是,在某些情況下,您可能需要從多個來源讀取相同的資料。

實現此目的的一種方法是使用 io.TeeReader。此函數建立一個新的 io.Reader 來複製輸入數據,允許您建立多個實例,並分別引用原始流。

例如:

package main

import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)

    log.Println(ioutil.ReadAll(tee))
    log.Println(ioutil.ReadAll(&buf))
}
登入後複製

在此範例中,首先在 tee 上呼叫 ioutil.ReadAll(),它從原始流中讀取並記錄資料。然後,在 &buf 上呼叫 ioutil.ReadAll(),它會列印來自 TeeReader 的資料副本。

注意: 在嘗試從 buf 讀取之前先從 tee 讀取資料非常重要。否則,緩衝區將為空。

以上是如何在 Go 中多次讀取同一個 io.Reader ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板