如何在中间件和处理程序之间共享数据
您的处理程序返回 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中文网其他相关文章!