1、获取url参数
URL参数可以通过DefaultQuery()
或Query()
方法获取
DefaultQuery()
若参数不存在,返回默认值,Query()
若参数不存在,返回空串
user_id := ctx.Query("user_id")
page := ctx.DefaultQuery("page", "1")
// user?name=1,2,3,4,5
// [1,2,3,4,5]
names := contxt.QueryArray(“name”)
// user?name[1]=hallen1&name[2]=hallen2
// map[1:hallen1 2:hallen2]
name_map := contxt.QueryMap(“name”)
//通过bind绑定结构体
type queryUri struct {
Id int `uri:"id"`
Name string `uri:"name"`
}
var q queryUri
err := ctx.ShouldBindUri(&q)
2、获取header参数
token,session Id,cookie id等常存放在header中,可以从header中直接读取
key := ctx.Request.Header.Get(key)
//通过bind绑定结构体
type queryHeader struct {
MyHeader string `header:"my_header"`
MyDemo string `header:"my_demo"`
}
var q queryHeader
err := context.ShouldBindHeader(&q)
3、获取query参数
//通过bind绑定结构体
type queryParameter struct {
Year int `form:"year"`
Month int `form:"month"`
}
var q queryParameter
err := context.ShouldBindQuery(&q)
4、获取form参数
表单传输为post请求,http常见的传输格式为四种:
application/json
application/x-www-form-urlencoded
application/xml
multipart/form-data
表单参数可以通过PostForm()
方法获取,该方法默认解析的是x-www-form-urlencoded
或from-data
格式的参数
rows := ctx.Request.PostFormValue("rows")
5、获取body参数
//通过bind绑定结构体
type queryBody struct {
Name string `json:"name"`
Age int `json:"age"`
Sex int `json:"sex"`
}
var q queryBody
err := context.ShouldBindJSON(&q)
6、获取文件
f, err := ctx.FormFile("file")
如果获取参数的结构体可复用,建议用bind进行多个标签绑定
7、bind和shouldbind
Binding是一个接口,在源码中,有10个实现了Binding的结构体,以及3个接口
- Must bind
Methods: - Bind, BindJSON, BindXML, BindQuery, BindYAML
Behavior - 这些方法底层使用 MustBindWith,如果存在绑定错误,请求将被以下指令中止c.AbortWithError(400, err).SetType(ErrorTypeBind),响应状态代码会被设置为400,请求头Content-Type被设置为text/plain; charset=utf-8。注意,如果你试图在此之后设置响应代码,将会发出一个警告 [GIN-debug] [WARNING] Headers were already written. Wanted to override status code 400 with 422 - Should bind
Methods: - ShouldBind, ShouldBindJSON, ShouldBindXML, ShouldBindQuery, ShouldBindYAML
Behavior - 这些方法底层使用 ShouldBindWith,如果存在绑定错误,则返回错误,开发人员可以正确处理请求和错误。
参考链接:
https://blog.csdn.net/weixin_45604257/article/details/105145679
https://blog.csdn.net/kilmerfun/article/details/123929945
http://www.zzvips.com/article/221978.html
如有不对,烦请指出,感谢~