gpt4 book ai didi

go - 如何在 http.HandleFunc 中设置上下文值?

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:18 29 4
gpt4 key购买 nike

我想在 http.HandleFunc 中设置上下文值。以下方法似乎有效。

虽然我有点担心 *r = *r.WithContext(ctx)

type contextKey string
var myContext = contextKey("myContext")

func setValue(r *http.Request, val string) {
ctx := context.WithValue(r.Context(), myContext, val)
*r = *r.WithContext(ctx)
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
setValue(r, "foobar")
})

在 http.HandleFunc 中设置上下文变量的最佳方法是什么?

最佳答案

问题中的代码覆盖了请求对象。这可能会导致使用错误的上下文值在堆栈上进行编码。 Request.WithContext 创建请求的浅拷贝以避免这种情况。返回指向该浅拷贝的指针。

func setValue(r *http.Request, val string) *http.Request {
return r.WithContext(context.WithValue(r.Context(), myContext, val))
}

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)
})

关于go - 如何在 http.HandleFunc 中设置上下文值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825733/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com