如何在 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中文网其他相关文章!