gin post 数据参数_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函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。

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,分享我的工作经验。

发表评论电子邮件地址不会被公开。 必填项已用*标注

评论

姓名 *

电子邮件 *

站点

在此浏览器中保存我的名字、电邮和网站。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值