使用像request.Body 這樣的io.ReadCloser 類型時,可能會出現問題當想要執行多個操作時(例如,寫入檔案並解碼)。直接呼叫 ioutil.ReadAll() 會消耗整個流,導致後續操作無法進行。
與直接讀取不同,io.TeeReader 允許使用者複製 io.ReadAll() 。閱讀器流,允許對同一內容進行多次引用。這解決了讀取相同數據兩次的問題。
這是使用io.TeeReader 的實作:
package main import ( "bytes" "io" "io/ioutil" "log" "strings" ) func main() { r := strings.NewReader("io.Reader contents to be read") var buf bytes.Buffer tee := io.TeeReader(r, &buf) // Perform the first operation using tee. log.Println(ioutil.ReadAll(tee)) // Perform the second operation using the duplicated content in the buffer. log.Println(ioutil.ReadAll(&buf)) }
以上是如何在 Go 中複製 io.Reader 進行多次讀取操作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!