Rumah > pembangunan bahagian belakang > Golang > Mengapakah Menggunakan Goroutines Menyebabkan 'Panggilan Respons Berbilang.WriteHeader' dalam Pengendali HTTP Go?

Mengapakah Menggunakan Goroutines Menyebabkan 'Panggilan Respons Berbilang.WriteHeader' dalam Pengendali HTTP Go?

Mary-Kate Olsen
Lepaskan: 2024-12-10 06:53:00
asal
554 orang telah melayarinya

Why Does Using Goroutines Cause

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan