Panggilan WriteHeader Berbilang dalam Pengendali HTTP Go
Dalam program Go ringkas yang menampilkan pelayan bersih/http, pembangun menemui "tindak balas berbilang Ralat .WriteHeader calls" semasa cuba mengendalikan permintaan HTTP. Ralat berlaku apabila atur cara menggabungkan goroutine untuk melaksanakan fungsi HandleIndex, walaupun pada hakikatnya fungsi pengendali direka untuk menulis pengepala sekali dan menyediakan badan statik.
Penjelasan Ralat
Fungsi tanpa nama yang bertanggungjawab untuk mengendalikan permintaan masuk mencetak URL, memulakan fungsi HandleIndex dalam goroutine baharu, dan diteruskan dengan pelaksanaan. Apabila fungsi pengendali meninggalkan menetapkan status respons sebelum panggilan awal ke Tulis, Go secara automatik menetapkan status kepada 200 (HTTP OK). Selain itu, jika fungsi pengendali tidak menulis sebarang kandungan pada respons (dan tidak menetapkan status respons dan melengkapkan seperti biasa), ini dianggap sebagai pengendalian permintaan yang berjaya, menghasilkan status respons sebanyak 200.
Dalam kes ini, fungsi tanpa nama tidak menetapkan status respons dan tidak menulis apa-apa pada respons. Oleh itu, Go menetapkan status respons kepada 200 HTTP OK. Memandangkan setiap permintaan dikendalikan dalam goroutine sendiri, jika HandleIndex dipanggil dalam goroutine baharu, fungsi tanpa nama asal akan meneruskan pelaksanaan, termasuk menetapkan pengepala respons. Pada masa yang sama, goroutine yang baru dimulakan juga akan menetapkan pengepala respons, menyebabkan ralat "respon berbilang.WriteHeader calls".
Penyelesaian: Mengeluarkan Goroutine
Dengan menghapuskan kata kunci "go", HandleIndex akan digunakan dalam goroutine yang sama dengan fungsi pengendali, memastikan bahawa pengepala respons ditetapkan sebelum fungsi pengendali kembali. Ini menghalang pakej "net/http" daripada cuba menetapkan pengepala respons sekali lagi, menyelesaikan ralat.
Atas ialah kandungan terperinci Mengapakah Menggunakan Goroutines Menyebabkan 'Panggilan Respons Berbilang.WriteHeader' dalam Pengendali HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!