Cara Menetapkan Nilai Konteks dalam http.HandleFunc tanpa Mengganti Objek Permintaan
Dalam kod yang disediakan, pendekatan diikuti dalam func setValue to tetapkan nilai konteks di dalam *http.Request menimbulkan kebimbangan tentang menimpa objek permintaan. Berikut ialah pendekatan yang diperbetulkan:
func setValue(r *http.Request, val string) *http.Request { ctx := context.WithValue(r.Context(), myContext, val) return r.WithContext(ctx) // return shallow copy to avoid overwriting request object }
Apabila menetapkan nilai konteks dalam http.HandleFunc, kembalikan penuding kepada permintaan yang baru dibuat dengan konteks yang dikemas kini. Dengan melakukan ini, kami mengelak daripada mengubah suai objek permintaan asal dan memastikan bahawa pengendali seterusnya menerima nilai konteks yang betul:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") })
Jika pengendali memanggil pengendali lain, hantarkan permintaan yang dikemas kini dengan nilai konteks untuk memastikan kesinambungan :
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) // pass updated request to subsequent handler })
Dengan menggunakan pendekatan ini, kami boleh menetapkan nilai konteks dengan berkesan dalam http.HandleFunc tanpa menjejaskan yang asal minta objek.
Atas ialah kandungan terperinci Bagaimana untuk Menetapkan Nilai Konteks dalam http.HandleFunc tanpa Menimpa Objek Permintaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!