导语
做过web开发的同学肯定都知道,我们经常使用 r *http.Request
这个变量来获取我们希望获得的参数,但是我们经常遇到这样一个场景,我们需要为我们的r
设置更多的key-value形式的附加值,一般我们都会存储在一个Map对象中,用的时候再从里面取出,Golang考虑到这样一个场景,为我们提供了一个context,这里的context并不是上下文的意思,属于另外一个这个包github.com/gorilla/context
安装
使用这个库之前,我们同样用Golang中的经典获取包的方式go get命令来获取
go get github.com/gorilla/context
使用方法
设置
context.Set(r, "user", "wuyazi")
context.Set(r, "age", 21)
在上面的这个函数里,r
即是*http.Request
我们设置了一个key为user,value为wuyazi,另一个key为age,value为21。
获取
user := context.Get(r, "user").(string)
age := context.Get(r, "age").(int)
获取我们使用一个Get()的函数,该函数会返回一个interface{}
类型的值,然后我们使用断言,进行类型转换,就能得到我们设置的数据了。
底层原理学习——源码剖析
Set()函数
这个函数接收了3个参数,这3个参数见名知意,这里不再过多介绍,在这个函数里,我们首先可以看到一个关于写入的锁来保证数据的安全性,接着判断我们传入的r
是否已经存在了我们的data变量里。这里的data是一个双层嵌套的map,定义如下所示
make(map[*http.Request]map[interface{}]interface{})
interface{}类型则表示了我们可以存入各