将 Golang 请求中的上下文传递给中间件
理解 Golang 1.7 中引入的上下文机制可能具有挑战性。本文旨在阐明如何有效地将上下文传递给中间件和处理函数。
派生上下文
正如 Go 并发模式博客文章中提到的,您可以派生上下文从背景语境来看。 Request 对象还提供 Context 和 WithContext 方法。这允许您为特定目的创建自定义上下文。
实现超时
在请求处理程序中,您可以使用 WithTimeout 方法指定超时。这将创建一个具有设置超时的派生上下文。
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(60*time.Second)) defer cancel() r = r.WithContext(ctx)
将用户信息添加到上下文
在授权检查器中,您可以在之前将用户信息添加到上下文调用 ServeHTTP。
type ContextKey string const ContextUserKey ContextKey = "user" // ... ctx := context.WithValue(r.Context(), ContextUserKey, "theuser") h.ServeHTTP(w, r.WithContext(ctx))
从上下文中检索用户信息
在处理程序中,您可以从上下文中访问用户信息。
user := r.Context().Value(ContextUserKey) doSomethingForThisUser(user.(string))
使用上下文链接中间件
在主函数中,您可以使用 util.UseMiddleware 链接中间件处理程序,在每个处理程序之间传递上下文。
router.Handle("/hello", util.UseMiddleware(authCheck, HandlerW, ...))
结论
按照以下步骤,您可以有效地将 Golang 请求中的上下文传递给中间件和处理函数,从而增强灵活性并维护代码中的线程安全。
以上是如何有效地将上下文传递给 Golang 中的中间件和处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!