本文コンテンツの読み取り後の xml.NewDecoder() による XML デコード エラー
HTTP 応答本文から XML をデコードしようとすると、開発者は、 xml.NewDecoder() で EOF (ファイルの終わり) エラーが発生しました。このエラーは通常、本文のコンテンツがすでに読み取られているか処理されている場合に発生します。
提供されたコード サンプルには、ioutil.ReadAll() を使用して応答本文が最初に読み取られるセクションが含まれています。このアクションは本文のコンテンツ全体を消費するため、後続の操作では使用できなくなります。その結果、xml.NewDecoder() を使用して本文を読み取ると、ファイルの終わりに到達し、EOF エラーがトリガーされます。
このエラーを回避するには、応答本文のコンテンツを読み取り操作を実行する前に変数を変更します。これにより、xml.NewDecoder() などの他の関数が EOF エラーを引き起こすことなくコンテンツにアクセスできるようになります。
サンプル コードの変更:
<code class="go">var bodyContent []byte resp1, err := client.Do(req1) error_handler(err) defer resp1.Body.Close() bodyContent, err = ioutil.ReadAll(resp1.Body) error_handler(err) resp1.Body = ioutil.NopCloser(bytes.NewBuffer(bodyContent)) if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil { fmt.Printf("error is : %v", err) return }</code>
を導入することでbodyContent 変数を変更し、resp1.Body を更新すると、コンテンツを両方のアクションで再利用できます。このアプローチにより、EOF エラーが排除され、XML デコードが成功することが可能になります。
以上が`xml.NewDecoder()` が HTTP 応答本文を読み取った後に EOF エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。