request.Body のような io.ReadCloser 型を操作する場合、問題が発生する可能性があります複数の操作を実行したい場合 (ファイルへの書き込みとデコードなど)。 ioutil.ReadAll() への直接呼び出しはストリーム全体を消費し、その後の操作が不可能になります。
直接読み取りとは異なり、io.TeeReader を使用するとユーザーは io を複製できます。リーダー ストリーム。同じコンテンツへの複数の参照を可能にします。これにより、同じデータを 2 回読み取る問題が解決されます。
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 中国語 Web サイトの他の関連記事を参照してください。