首页 >后端开发 >Golang >如何在 Go 中的中间件和处理程序之间共享数据?

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

Barbara Streisand
Barbara Streisand原创
2024-11-17 09:03:03982浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn