ginpost数据参数_gin请求参数处理
本章介绍Gin框架获取请求参数的⽅式
1.获取Get 请求参数
Get请求url例⼦:/path?id=1234&name=Manu&value=111
获取Get请求参数的常⽤函数:
func (c *Context) Query(key string) string
func (c *Context) DefaultQuery(key, defaultValue string) string
func (c *Context) GetQuery(key string) (string, bool)
例⼦:
func Handler(c *gin.Context) {
//获取name参数, 通过Query获取的参数值是String类型。
name := c.Query("name")
//获取name参数, 跟Query函数的区别是,可以通过第⼆个参数设置默认值。
name := c.DefaultQuery("name", "sockstack")
//获取id参数, 通过GetQuery获取的参数值也是String类型,
// 区别是GetQuery返回两个参数,第⼀个是参数值,第⼆个参数是参数是否存在的bool值,可以⽤来判断参数是否存在。id, ok := c.GetQuery("id")
if !ok {
// 参数不存在
}
}
提⽰:GetQuery函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。
parameter数据类型
2.获取Post请求参数
获取Post请求参数的常⽤函数:
func (c *Context) PostForm(key string) string
func (c *Context) DefaultPostForm(key, defaultValue string) string
func (c *Context) GetPostForm(key string) (string, bool)
例⼦:
func Handler(c *gin.Context) {
//获取name参数, 通过PostForm获取的参数值是String类型。
name := c.PostForm("name")
// 跟PostForm的区别是可以通过第⼆个参数设置参数默认值
name := c.DefaultPostForm("name", "sockstack")
/
/获取id参数, 通过GetPostForm获取的参数值也是String类型,
// 区别是GetPostForm返回两个参数,第⼀个是参数值,第⼆个参数是参数是否存在的bool值,可以⽤来判断参数是否存在。
id, ok := c.GetPostForm("id")
if !ok {
// 参数不存在
}
}
3.获取URL路径参数
获取URL路径参数,指的是获取 /user/:id 这类型路由绑定的参数,这个例⼦绑定了⼀个参数id。
获取url路径参数常⽤函数:
func (c *Context) Param(key string) string
例⼦:
r := gin.Default()
r.GET("/user/:id", func(c *gin.Context) {
// 获取url参数id
id := c.Param("id")
})
4.将请求参数绑定到struct对象
前⾯获取参数的⽅式都是⼀个个参数的读取,⽐较⿇烦,Gin框架⽀持将请求参数⾃动绑定到⼀个struct对象,这种⽅式⽀持Get/Post请求,也⽀持http请求body内容为json/xml格式的参数。
例⼦:
下⾯例⼦是将请求参数绑定到User struct对象。
// User 结构体定义
type User struct {
Name string `json:"name" form:"name"`
Email string `json:"email" form:"email"`
}
通过定义struct字段的标签,定义请求参数和struct字段的关系。
下⾯对User的Name字段的标签进⾏说明。
struct标签说明:
标签
说明
json:"name"
数据格式为json格式,并且json字段名为name
form:"name"
表单参数名为name
提⽰:你可以根据⾃⼰的需要选择⽀持的数据类型,例如需要⽀持json数据格式,可以这样定义字段标签: json:"name"
下⾯看下控制器代码:
r.POST("/user/:id", func(c *gin.Context) {
// 初始化user struct
u := User{}
// 通过ShouldBind函数,将请求参数绑定到struct对象, 处理json请求代码是⼀样的。
// 如果是post请求则根据Content-Type判断,接收的是json数据,还是普通的http请求参数
if c.ShouldBind(&u) == nil {
// 绑定成功, 打印请求参数
log.Println(u.Name)
log.Println(u.Email)
}
// http 请求返回⼀个字符串
c.String(200, "Success")
})
ShouldBind有⼀系列函数,⼤致就是把前⾯的⽅式绑定到结构体的⽅式,如:ShouldBindUri()、ShouldBindQuery()等等,⽤法和ShouldBind类似,这⾥就不展开介绍了
提⽰:如果你通过http请求body传递json格式的请求参数,并且通过post请求的⽅式提交参数,则需要将Content-Type设置为application/json, 如果是xml格式的数据,则设置为application/xml
5.获取请求头信息
获取请求头的常⽤函数:
func (c *Context) GetHeader(key string) string
例⼦:
func Handler(c *gin.Context) {
//获取请求头Host的值
host := c.GetHeader("Host")
//控制台输出host的值
fmt.Println(host)
}
6.获取客户IP
r := gin.Default()
r.GET("/ip", func(c *gin.Context) {
/
/ 获取⽤户IP
ip := c.ClientIP()
})
出处gin从⼊门到实践更多精彩⽂章,请关注我的博客SOCKSTACK,分享我的⼯作经验。发表评论电⼦邮件地址不会被公开。 必填项已⽤*标注
评论
姓名 *
电⼦邮件 *
站点
在此浏览器中保存我的名字、电邮和⽹站。