ホームページ > バックエンド開発 > Golang > `xml.NewDecoder()` が HTTP 応答本文を読み取った後に EOF エラーをスローするのはなぜですか?

`xml.NewDecoder()` が HTTP 応答本文を読み取った後に EOF エラーをスローするのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-02 03:09:02
オリジナル
1042 人が閲覧しました

Why Does `xml.NewDecoder()` Throw an EOF Error After Reading the HTTP Response Body?

本文コンテンツの読み取り後の 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート