首页 > 后端开发 > Golang > 正文

如何在 http.HandleFunc 中设置上下文值而不覆盖请求对象?

Linda Hamilton
发布: 2024-11-24 16:47:16
原创
629 人浏览过

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

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板