Ralat EOF Tidak Dijangka dalam Permintaan HTTP Golang semasa Panggilan Berturut-turut
Dalam percubaan untuk menyelesaikan ralat luar biasa yang dihadapi semasa menggunakan pakej net/http standard , pengguna melaporkan pengecualian EOF (Akhir Fail) terputus-putus apabila membuat berbilang permintaan HTTP berturut-turut.
Coretan kod yang disediakan oleh pengguna termasuk fungsi ujian untuk permintaan GET dan PUT, di mana ralat berlaku secara sporadis semasa pelaksanaan.
Menyelesaikan Masalah
Selepas menganalisis kod tersebut, didapati punca asas berkaitan dengan pengendalian permintaan yang tidak betul. Khususnya, medan Req.Close tidak ditetapkan secara eksplisit kepada benar.
Dalam kod yang disediakan, sintaks defer resp.Body.Close() telah digunakan untuk mengendalikan penutupan badan respons. Walau bagaimanapun, ini terbukti tidak mencukupi dan menetapkan Req.Close to true diperlukan untuk memastikan pengendalian permintaan yang betul.
Kod Kemas Kini
Coretan kod berikut menunjukkan cara menetapkan dengan betul Req.Close:
client := &http.Client{} req, err := http.NewRequest(method, url, httpBody) // **NOTE** this !! req.Close = true req.Header.Set("Content-Type", "application/json") req.SetBasicAuth("user", "pass") resp, err := client.Do(req) if err != nil { // whatever } defer resp.Body.Close() response, err = ioutil.ReadAll(resp.Body) if err != nil { // Whatever }
Resolusi
Menetapkan Req.Close to true dengan berkesan menjamin permintaan HTTP ditutup dengan betul, menghalang ralat EOF daripada berlaku. Dengan melaksanakan perubahan ini, fungsi ujian pengguna lulus secara konsisten apabila membuat berbilang permintaan, menyelesaikan isu tersebut.
Atas ialah kandungan terperinci Mengapa Permintaan HTTP Golang Berturut-turut Menghasilkan Ralat EOF Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!