目录
- gin框架
- Context中Get函数的数据源
- Context中Param函数的
- Context中Query函数的数据源
- Context中的PostForm函数的数据源
- 总结
gin框架
在使用gin框架处理一次请求的过程中,可以通过Context结构体提供的方法获取或设置一个指定key的值。在Context中有多个通过key获取值的函数:GetString(key string) (s string)
、Param(key string) string
、Query(key string) (value string)
、PostForm(key string) (value string)
、GetHeader(key string)
、Cookie(name string)
等。
那么,这些函数到底是从哪里获取数据的呢?本文就带你一起来探究这些函数底层的数据源。
Context中Get函数的数据源
Context.Get函数是从Context.Keys字段中获取的数据。我们看下Context的Keys字段的定义(为方便文章说明,我们省略了Context中的其他无关字段):
typeContextstruct{ //Keysisakey/valuepairexclusivelyforthecontextofeachrequest. Keysmap[string]any }
可以看到,Keys
是一个map[string]any
类型的map。any
是gin
中interface{}
的别名。js通过该定义可知,在Keys字段中键必须是string类型,值可以是任意类型。
这个开发者_JAVA入门Keys中的值又来源于哪里呢?是在gin服务在处理请求时通过Context.Set函数设置的。Keys里的数据的生命周期是本次请求,作用域范围也仅限于本次请求。请求结束了,Keys里的值也就结束了。
同时,Context.Keys
字段的初始化也采用了lazy模式。即在使用Context.Set函数时才进行初始化的。
对于Get函数来说,还有一些GetXXX的辅助函数,比如:MustGet、GetString、GetBool、GetInt、GetInt64等等,也都是从Keys中获取数据。
Context中Param函数的
Context.Param(key string)函数是从正则路径中获取对应的匹配数据值。在gin中,正则路径的参数是被解析到Context.Params字段中的。其字段定义如下:
typeContextstruct{ ParamsParams } typeParams[]Param typeParamstruct{ Keystring Valuestring }
例如,javascript我们定义了正则路径 "/user/:id",那么通过c.Param("id")函数就能获取到本次路由中的id参数值。
router.GET("/user/:id",func(c*gin.Context){ //aGETrequestto/user/john id:=c.Param("id")//id=="john" })
Context中Query函数的数据源
Context.Query函数是获取的url中的查询参数的值。在gin中,将查询参数的值会解析到Context中的queryCache
字段中,而queryCache的数据则来源于Context.Request.URL.RawQuery中。如下:
typeContextstruct{ //queryCachecachesthequeryresultfromc.Request.URL.Query(). queryCacheurl.Values }
比如,我们请求的url是 GET /path?id=1234&name=Manu&value=
,那么就可以通过Query查询到id、name和value对应的值:
c.Query("id")=="1234" c.Query("name")=="Manu" c.Query("value")=="" c.Query("wtf")==""
Context中的PostForm函数的数据源
Context.PostForm(key string) 函数是从form表单的urlencode编码的集合中获取数据。这里是form表单中以urlencoded形式编码的key/value值。如果是上传的文件,则不能通过该函数获取。
在gin框架中,会把form表单的数据缓存到Context的formCache
中。获取时,会直接从formCache中获取。如下:
typeContextstruct{ formCacheurl.Values }
通过formCache字段的类型为url.Values也可以知道,该字段存储的只有form表单中的urlencode编码的key/value值。比如,有如下form表单,那么formCache中的值就是username和password。而action值中的utm_source=login以及file类型的参数是不在fhttp://www.devze.comormCache中的。
<forMACtion="http://localhostjavascript:9090/login?utm_source=login"method="POST"enctype="multipart/form-data"> <inputtype="text"name="username"value="yufuzi"/> <inputtype="text"name="password"/> <inputtype="file"name="f"/> <inputtype="submit"value="submit"/> </form>
总结
本文总结了gin框架中使用Context结构体中获取指定key的值的各种函数的数据来源。通过Context中Keys字段、动态路由中路径中的参数的Params字段、url查询中查询参数的queryCache字段以及form表单中urlencode参数的formCajsche字段。具体可以参考下图:
以上就是gin框架Context如何获取Get Query Param函数数据的详细内容,更多关于gin框架Context数据获取的资料请关注我们其它相关文章!
精彩评论