如何在http.HandleFunc 中設定上下文值而不覆蓋請求物件
在提供的程式碼中,func setValue 中遵循的方法為在*http.Request 中設定上下文值會引發對覆蓋請求物件的擔憂。這是一個更正的方法:
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 }
在 http.HandleFunc 中設定上下文值時,使用更新的上下文傳回指向新建立的請求的指標。透過這樣做,我們可以避免修改原始請求對象,並確保後續處理程序收到正確的上下文值:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") })
如果處理程序呼叫另一個處理程序,請將更新後的請求與上下文值一起傳遞以確保連續性:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { r = setValue(r, "foobar") someOtherHandler.ServeHTTP(w, r) // pass updated request to subsequent handler })
透過利用這種方法,我們可以在http.HandleFunc 中有效地設定上下文值,而不會影響原始請求物件。
以上是如何在 http.HandleFunc 中設定上下文值而不覆寫請求物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!