Rumah >pembangunan bahagian belakang >Golang >Mengapakah `*http.Request` sebagai Penunjuk tetapi `http.ResponseWriter` Tiada dalam Pengendali HTTP Go?

Mengapakah `*http.Request` sebagai Penunjuk tetapi `http.ResponseWriter` Tiada dalam Pengendali HTTP Go?

Barbara Streisand
Barbara Streisandasal
2024-12-24 13:59:10180semak imbas

Why is `*http.Request` a Pointer but `http.ResponseWriter` is Not in Go HTTP Handlers?

Petunjuk dalam Pengendali HTTP

Dalam Go, tandatangan fungsi pengendali HTTP biasanya menyerupai ini:

func handle(w http.ResponseWriter, r *http.Request) {}

Tandatangan ini menimbulkan soalan untuk pendatang baru kepada penunjuk: mengapa objek Permintaan penunjuk, manakala ResponseWriter bukan?

Untuk memahami perkara ini, adalah penting untuk menyelidiki secara khusus kedua-dua jenis.

ResponeWriter mewakili objek respons HTTP. Walau bagaimanapun, di bawah permukaan, ia sebenarnya penunjuk kepada jenis yang tidak dieksport dipanggil http.response, yang merangkumi dalaman pengendalian tindak balas HTTP. Memandangkan ResponseWriter ialah antara muka, pelaksanaan asas ini tidak didedahkan.

Sebaliknya, objek Permintaan ialah penunjuk kepada struktur konkrit (Permintaan), yang mengandungi medan yang mewakili pelbagai aspek permintaan HTTP, seperti pengepala , kandungan dan maklumat URL. Tidak seperti ResponseWriter, yang menguruskan respons pelayan, objek Permintaan digunakan terutamanya untuk mengakses data permintaan pelanggan. Melepasinya sebagai penunjuk membolehkan pengendali mengubah suai parameter permintaan secara langsung, jika perlu.

Atas ialah kandungan terperinci Mengapakah `*http.Request` sebagai Penunjuk tetapi `http.ResponseWriter` Tiada dalam Pengendali HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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