處理來自同一個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中文網其他相關文章!