Rumah > Artikel > pembangunan bahagian belakang > Mengapa Adakah `xml.NewDecoder()` Melemparkan Ralat EOF Selepas Membaca Badan Respons HTTP?
Ralat Penyahkod XML dengan xml.NewDecoder() Selepas Membaca Kandungan Kandungan
Apabila cuba menyahkod XML daripada badan tindak balas HTTP, pembangun boleh menghadapi ralat EOF (akhir fail) dengan xml.NewDecoder(). Ralat ini lazimnya berlaku jika kandungan kandungan telah dibaca atau diproses.
Sampel kod yang disediakan termasuk bahagian di mana badan respons pertama kali dibaca menggunakan ioutil.ReadAll(). Tindakan ini menggunakan seluruh kandungan badan, menjadikannya tidak tersedia untuk operasi seterusnya. Akibatnya, apabila xml.NewDecoder() digunakan untuk membaca kandungan, ia sampai ke penghujung fail dan mencetuskan ralat EOF.
Untuk mengelakkan ralat ini, disyorkan untuk menyimpan kandungan badan respons ke dalam pembolehubah sebelum melakukan sebarang operasi baca. Ini membenarkan fungsi lain, seperti xml.NewDecoder(), untuk mengakses kandungan tanpa mencetuskan ralat EOF.
Sampel Kod Pengubahsuaian:
<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>
Dengan memperkenalkan pembolehubah bodyContent dan mengemas kini resp1.Body, kandungan boleh digunakan semula untuk kedua-dua tindakan. Pendekatan ini menghapuskan ralat EOF dan membolehkan penyahkodan XML yang berjaya.
Atas ialah kandungan terperinci Mengapa Adakah `xml.NewDecoder()` Melemparkan Ralat EOF Selepas Membaca Badan Respons HTTP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!