使用 Gorilla 中间件从上下文映射中手动删除 val

问题描述 投票:0回答:1

我需要这样做吗:

  r.Use(func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
      muxctx.Set(r, "req-res-ctx", &mw.Ctx{
        Log: vbl.Stdout.Child(&map[string]interface{}{}),
      })
      defer func() {   
        muxctx.Delete(r, "req-res-ctx") // <-------------------- HERE
      }()
      next.ServeHTTP(w, r)
    })
  })

或者上下文会神奇地自动删除该条目吗?我想我也需要这样做:

      defer func() {   
        muxctx.Delete(r) // delete ref to request too?
      }()
go gorilla context-tracing golang-context
1个回答
0
投票

看起来我们应该像这样使用 muxctx.Clear(r) :

  r.Use(func(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
      muxctx.Set(r, "req-res-ctx", &mw.Ctx{
        Log: vbl.Stdout.Child(&map[string]interface{}{}),
      })
      defer func() {
        muxctx.Delete(r, "req-res-ctx")
        muxctx.Clear(r)  // <---------------HERE
      }()
      next.ServeHTTP(w, r)
    })
  })

我还读到我们应该使用

ctx := r.Context()
,但这个 API 看起来很混乱,不确定这是否是一个改进。

© www.soinside.com 2019 - 2024. All rights reserved.