Gorilla/context
在请求的生命周期中,存储并共享数据
需要注意的是gorilla/context
与标准库中的context.Context
不能同时使用
举例来说,可以从一个路由中提取参数并设置其值,然后在之后的处理句柄中使用该值,或者用来存储用户会话的值
基础用法
定义一个任意类型的key,
package foo import ( "github.com/gorilla/context" ) type key int const Mykey key = 0
为定义好的key,设置相对应的值,并添加到请求中,其函数签名为
func(*Request, key, value)
context.Set(r, Mykey, "bar")
然后就可以在其他的句柄中,获取该请求信息
func MyHandler(w http.ResponseWriter, r *http.Request) { val := context.Get(r, foo.MyKey) }
在使用完后,需要清除请求中所存储的值
context.Clear(r)
当然,除了
Clear(r)
方法之外,还可以使用ClearHandler()
方法来包含http.Handler
类型的处理句柄 如果使用了gorilla/mux
或者gorilla/pat
库的话,那么就无需再执行相对应的清除操作,因为对应的库里面已经进行了相应的操作
API
清除请求中的所有值
func Clear(r *http.Request)
在请求的生命周期最后环节,清除设置的值
func ClearHandler(h http.Handler) http.Handler
- 通过key移除指定的值
func Delete(r *http.Request, key interface{})
通过key,获取指定的值
func Get(r *http.Request, key interface{}) interface{}
获取请求中的所有的值,如果请求错误,将会直接返回一个
nil
func GetAll(r *http.Request) map[interface{}]interface{}
获取请求中的所有值,并增加一个bool值来校验请求是否被注册
func GetAllOk(r *http.Request)(map[interface{}]interface{}, bool)
- 获取某个值,并返回一个bool值来校验,该值是否存在
func GetOk(r *http.Request, key interface{})(interface{},bool)
移除超过
maxAge
所限定的最大长度的值,并且返回被移除的数量,如果maxAge < 0
那么,所有的值都将会被移除func Purge(maxAge int) int
设置一个值
func Set(r *http.Request, key, val interface{})