Memahami Keperluan Penunjuk dalam http.Permintaan
Dalam bahasa pengaturcaraan Go, penunjuk adalah penting untuk mengendalikan struktur besar dengan cekap. Jenis http.Request, yang mewakili permintaan HTTP masuk, ialah contoh utama struktur sedemikian.
Dalam sintaks Go, penunjuk ialah jenis data yang menyimpan alamat nilai lain. Apabila parameter diluluskan oleh penuding, sebarang perubahan yang dibuat pada parameter tersebut dalam fungsi akan dicerminkan secara global.
Dalam kes http.Request, struct tersebut adalah besar dan menyalinnya akan mahal dari segi pengiraan. Menggunakan penuding membolehkan fungsi mengakses struct asal secara terus, menjimatkan memori dan masa pemprosesan.
Pertimbangkan contoh berikut:
<code class="go">// Using a pointer http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) })</code>
Jika * dialih keluar daripada http.Request type , mesej ralat akan berlaku:
cannot use func literal (type func(http.ResponseWriter, http.Request)) as type func(http.ResponseWriter, *http.Request) in argument to http.HandleFunc
Ini kerana fungsi pengendali HTTP (HandleFunc) menjangkakan fungsi yang mengambil ResponseWriter dan penunjuk kepada Permintaan sebagai argumen. Penunjuk kepada struct secara berkesan merujuk kepada struct asal, membenarkan pengubahsuaian yang dibuat dalam fungsi dapat dilihat di luarnya.
Sebaliknya, fungsi literal dilaksanakan serta-merta dan mengembalikan nilai. Ia tidak sesuai untuk mengendalikan objek permintaan HTTP stateful.
Dengan menggunakan penunjuk ke http.Request, Go mengelakkan penyalinan struktur besar yang tidak perlu, mengoptimumkan penggunaan memori dan memastikan bahawa perubahan yang dibuat dalam fungsi pengendali adalah dicerminkan secara global.
Atas ialah kandungan terperinci Mengapa Penunjuk Digunakan untuk Jenis http.Request dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!