gin独自のcontextをカスタマイズ

845 ワード

ginを使用する場合、ユーザーのidなどの変数をcontextに保存するには、contextのKeys変数に置くのが一般的です.そうすると、取るたびにタイプ変換を行わなければなりません.私が慣れている方法は、自分のcontextを定義し、contextで保存したい変数を定義することです.次のようにします.
type context struct {
    *gin.Context
    userId   int64 //   id
}

次にhandlerを定義します
func do(c *context) {
    fmt.Println(c.userId)
}

それから、どのようにそれをEngineの中に登録して、ここはまた1つの関数が処理する必要があります
type HandlerFunc func(*context)

func handler(handler HandlerFunc) gin.HandlerFunc {
    return func(c *gin.Context) {
        context := new(context)
        context.Context = c
        if userId, ok := c.Keys[keyUserId]; ok {
            context.userId = userId.(int64)
        }
        handler(context)
    }
}

次は、Engineに登録できます
var Engine = gin.New()
Engine.GET("/hi",handler(do))