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
Lepaskan: 2024-11-24 16:47:16
asal
682 orang telah melayarinya

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
}
Salin selepas log masuk

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")
})
Salin selepas log masuk

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
})
Salin selepas log masuk

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!

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