Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menetapkan Nilai Konteks dalam http.HandleFunc tanpa Menimpa Objek Permintaan?

Bagaimana untuk Menetapkan Nilai Konteks dalam http.HandleFunc tanpa Menimpa Objek Permintaan?

Linda Hamilton
Linda Hamiltonasal
2024-11-24 16:47:16697semak imbas

How to Set Context Value in an http.HandleFunc without Overwriting the Request Object?

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!

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