ホームページ > バックエンド開発 > Golang > Go で HTTP 応答本文から XML をデコードすると EOF エラーが発生するのはなぜですか?

Go で HTTP 応答本文から XML をデコードすると EOF エラーが発生するのはなぜですか?

Linda Hamilton
リリース: 2024-10-29 09:04:30
オリジナル
640 人が閲覧しました

Why am I getting an EOF error when decoding XML from an HTTP response body in Go?

xml.NewDecoder(resp.Body).Decode Go で EOF エラーが発生する

を使用して HTTP 応答本文から XML をデコードしようとするとxml.NewDecoder では、「EOF」エラーが発生する可能性があります。これは通常、以前に応答本文を使用しており、それ以降の XML のデコード試行が利用できなくなった場合に発生します。

コードの内訳は次のとおりです。

<code class="go">conts1, err := ioutil.ReadAll(resp1.Body)</code>
ログイン後にコピー

このコードは本文を読み取ります。 ioutil.ReadAll を使用して、応答全体を効果的に消費します。

<code class="go">if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)</code>
ログイン後にコピー

ioutil.ReadAll で本文を読み取った後、同じ本文 (resp1.Body) から XML をデコードしようとすると、EOF エラーが発生します。コンテンツはすでに消費されています。

解決策:

この問題を解決するには、ioutil.ReadAll を使用して消費する前に、応答本文を変数に保存します。これにより、バッファされた応答から XML をデコードできるようになります。

<code class="go">resp1Bytes, err := ioutil.ReadAll(resp1.Body)</code>
ログイン後にコピー

次に、このバッファされた応答をデコードに使用します:

<code class="go">if err := xml.NewDecoder(bytes.NewReader(resp1Bytes)).Decode(&v); err != nil {
    fmt.Printf("error is : %v", err)
}</code>
ログイン後にコピー

以上がGo で HTTP 応答本文から XML をデコードすると EOF エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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