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

如何在 Go 中的中间件和处理程序之间共享数据?

Barbara Streisand
发布: 2024-11-17 09:03:03
原创
899 人浏览过

How Can I Share Data Between Middleware and Handlers in Go?

如何在中间件和处理程序之间共享数据

您的处理程序返回 HTTP 处理程序,并且您的中间件接受 HTTP 处理程序并在执行其后调用它们运营。要将数据从中间件传递到处理程序,您可以利用 context 包。

import (
    "context"
    "github.com/gorilla/mux"
)

func Middleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // Middleware operations
        // Parse body/get token.
        token := parseToken(r)
        ctx := context.WithValue(r.Context(), "token", token)

        next.ServeHTTP(w, r.WithContext(ctx))
    })
}

func Handler() http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        token := r.Context().Value("token")
        // Continue with handler logic
    })
}
登录后复制

这种方法避免了在中间件和处理程序中解析 JWT,从而确保资源的有效利用。请注意,您可以通过更改 r.Context().Value().

中 Value 参数的类型来传递任何类型的数据

以上是如何在 Go 中的中间件和处理程序之间共享数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

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