io.Reader から複数回読み取るにはどうすればよいですか?
Dec 16, 2024 pm 02:26 PM同じ io.Reader から複数回読み取る方法
request.Body などの io.Reader を操作する場合、画像などのデータが含まれている場合、コンテンツに複数回アクセスする必要がある場合があります。ただし、ioutil.ReadAll() を使用するとコンテンツ全体が消費され、その後の読み取りが不可能になります。
課題
次に示すように、リーダーの複数のインスタンスを作成しようとしています。以下のコードでは、2 回目の呼び出しでは nil 値が返されます:
package main import ( "io/ioutil" "log" "strings" ) func main() { r := strings.NewReader("some io.Reader stream to be read\n") a := &r b := &r log.Println(ioutil.ReadAll(*a)) log.Println(ioutil.ReadAll(*b)) }
解決策: TeeReader
同じ io.Reader から複数回読み取るには、io.TeeReader を使用できます。ストリームを複製し、複数のソースから同時に読み取ることができます。
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)) }
例:
上の例では、まず、以下を読み取る TeeReader を作成します。元のリーダーとバッファから。次に、TeeReader とバッファーから読み取り、同じコンテンツを 2 回取得します。
以上がio.Reader から複数回読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?
