xml.NewDecoder(resp.Body).Decode Memberi EOF Ralat di Golang
Menyahkod XML daripada badan tindak balas HTTP di Golang boleh menghasilkan dalam ralat "EOF" yang tidak dijangka. Setelah disiasat, didapati bahawa badan respons telah dibaca sekali, menghalang fungsi lain daripada membacanya semula.
Isu:
Coretan kod termasuk baris yang menggunakan ioutil.ReadAll(resp1.Body) untuk membaca badan tindak balas ke dalam pembolehubah rentetan. Langkah ini menggunakan kandungan badan respons, menjadikannya tidak tersedia untuk bacaan seterusnya.
Penyelesaian:
Untuk menangani isu ini, kod tersebut harus diubah suai untuk memastikan respons badan tidak dibaca beberapa kali. Ini boleh dicapai dengan menggunakan fungsi xml.Unmarshal terus pada badan tindak balas tanpa membacanya terlebih dahulu ke dalam pembolehubah rentetan.
Kod Dibetulkan:
<code class="go">resp1, err := client.Do(req1) error_handler(err) if err := xml.NewDecoder(resp1.Body).Decode(&v); err != nil { fmt.Printf("error is : %v", err) return }</code>
Oleh menghapuskan baris ioutil.ReadAll(resp1.Body), kod tersebut boleh berjaya menyahkod kandungan XML daripada badan tindak balas tanpa menghadapi ralat EOF. Adalah penting untuk ambil perhatian bahawa badan tindak balas ialah io.ReadCloser, yang harus ditutup selepas digunakan menggunakan baris defer resp1.Body.Close() untuk melepaskan sebarang sumber sistem.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat EOF Semasa Menyahkod XML di Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!