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 サイトの他の関連記事を参照してください。