Rumah >pembangunan bahagian belakang >Golang >masalah pengalihan permintaan golang (ralat berlebihan)
Apabila menggunakan golang untuk membuat permintaan rangkaian, anda mungkin kadangkala menghadapi masalah pengalihan permintaan. Masalah ini mungkin disebabkan oleh ralat berlebihan. Editor PHP Xigua akan memberitahu anda cara menyelesaikan masalah ini untuk memastikan kelancaran kemajuan permintaan rangkaian. Mari lihat!
Saya mendapat perangai yang sangat pelik dari golang.
Saya ingin melakukan sesuatu dengan permintaan siaran dan kemudian mengubah hala permintaan itu. Bergantung pada faktor rawak...sama ada berkesan atau tidak.
Apabila ia tidak berfungsi, saya mendapat ralat ini:
"http: respons berlebihan. Panggilan WriteHeader daripada..."
Lebih mendalam fungsi, semakin kecil kemungkinan pengalihan akan berfungsi.
Saya tidak mahu menyalin semua kod di sini, jadi saya akan meringkaskannya.
Pengendali mengendalikan permintaan POST, menghantar data permintaan dalam peta bernama demand
.
Kemudian parse permintaan untuk mendapatkan nilai borang dan simpan ke dalam demand
Ia dihantar ke saluran.
Graf permintaan dihantar dari saluran ke fungsi berikut:
func answer_login(demand map[string]any) map[string]any { writer := demand["writer"].(http.ResponseWriter) request := demand["request"].(*http.Request) http.Redirect(writer, request, "/", 302) // <- if it is here it works (at95 %) // some mundane code (printing stuff, really) . . . // http.Redirect(writer, request, "/", 302) // <- if it is here it works (only at 20 %) ...
Jika saya tekan F5, ia akhirnya mengubah hala dengan betul.
Saya cuba menulis sesuatu dalam writer.Write([]byte("same issues"))
, masalah yang sama.
Saya menggunakan Linux dan telah mencuba pelayar yang berbeza.
Soalan: Adakah ini pepijat (yang diketahui)?
Adakah terdapat sebarang penyelesaian?
(Tulis paksa kepada pelanggan)
Terima kasih
Saya akhirnya memahami masalah dan menemui penyelesaian.
Soalan:
Oleh itu, permintaan penulis diproses dan diubah hala dalam fungsi skop yang berbeza daripada fungsi pemprosesan sebenar. Dan apabila fungsi sebenarpengendali tamat. Faktor kontekstual tertentu menyebabkan permintaan penulis tamat tempoh: anda tidak boleh mengubah hala atau membalas permintaan itu lagi. Inilah yang dikatakan dalam dokumentasi:
https://pkg.go.dev/net/http p>
Satu penjelasan yang mungkin mengapa ia kadangkala berfungsi ialah... mungkin "pemindahan saluran, pemprosesan dan pengalihan" berlaku dengan cukup pantas (kadangkala) dan fungsi pengendali sebenar belum ditutup lagi.
Menyekat fungsi pengendali sebelum memproses data mengalahkan tujuan pemprosesan tak segerak selari. Jadi saya akhirnya meletakkan segala-galanya di dalam fungsi pengendali.
Orang pintar dialu-alukan untuk membetulkan saya atau berkongsi penjelasan yang lebih baik tentang konteks dan ResponseWriter.
Atas ialah kandungan terperinci masalah pengalihan permintaan golang (ralat berlebihan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!