本文作者:杰哥的技术杂货铺[1]

一、获取 query 参数

query 指的是 URL ? 后面携带的参数,例如 user/info?username=张三&password=123。获取请求的 query 参数的方法如下:

DefaultQuery
Query

完整示例如下

浏览器输入为:

服务端返回为:

后端处理逻辑如下:

注:一般使用 Query 方法

二、获取 form 表单参数

当前端请求的数据通过 form 表单提交时,例如向/user/info 发送一个 POST 请求,获取请求数据的方式如下:

完整示例如下

后端处理逻辑如下:

注:一般使用 PostForm 方法

三、获取 JSON 参数

当前端请求的数据通过 json 提交时,例如向/user/info 发送一个 POST 请求,则获取请求参数的方式如下:

  • 使用 postman 配置 json 请求如下:

72vl8g

  • 后端处理逻辑如下:
  • 返回结果如下所示:

72vgVx

四、获取 path 参数

请求的参数通过 URL 路径传递,例如/user/info/张三/123456。获取请求 URL 路径中的参数的方式如下。

  • 浏览器输入为:
  • 后端处理逻辑如下:
  • 返回结果如下:

注意如下请求路由定义方式是不合法的,如果想要定义两个类似的请求路由,可以加入版本号进行区分,如/user/v1/info/——>/user/v2/info/,版本号从 v1 到 v2。

错误写法:

正确写法:

五、参数绑定

为了能够更方便的获取请求相关参数,提高开发效率,我们可以基于请求的 Content-Type 识别请求数据类型并利用反射机制自动提取请求中 QueryString、form 表单、JSON、XML 等参数到结构体中。下面的示例代码演示了.ShouldBind()强大的功能,它能够基于请求自动提取 JSON、form 表单和 QueryString 类型的数据,并把值绑定到指定的结构体对象。

  • 通过 query 方式请求,此时输入 url,不需要其他配置:

7RnXxs

  • 通过 json 方式请求,输入 url,输入 json body,输入 Content-Type=application/json。

7RKi0P

  • 后端处理逻辑如下:

ShouldBind 会按照下面的顺序解析请求中的数据完成绑定:

  • 如果是 GET 请求,只使用 Form 绑定引擎(query)。
  • 如果是 POST 请求,首先检查 content-type 是否为 JSON 或 XML,然后再使用 Form(form-data)。

至此,我们学会了 gin 框架如何获取请求参数的方式。

本系列文章:

从零开发区块链应用(一)--golang 配置文件管理工具 viper[2]

从零开发区块链应用(二)--mysql 安装及数据库表的安装创建[3]

从零开发区块链应用(三)--mysql 初始化及 gorm 框架使用[4]

从零开发区块链应用(四)--自定义业务错误信息[5]

从零开发区块链应用(五)--golang 网络请求[6]

从零开发区块链应用(六)--gin 框架使用[7]

从零开发区块链应用(七)--gin 框架参数获取[8]

从零开发区块链应用(八)--结构体初识[9]

从零开发区块链应用(九)--区块链结构体创建[10]

从零开发区块链应用(十)--golang 协程使用[11]

从零开发区块链应用(十一)--以太坊地址生成[12]

参考资料

[1]

杰哥的技术杂货铺: https://learnblockchain.cn/people/3835

[2]

从零开发区块链应用(一)--golang配置文件管理工具viper: https://learnblockchain.cn/article/3446

[3]

从零开发区块链应用(二)--mysql安装及数据库表的安装创建: https://learnblockchain.cn/article/3447

[4]

从零开发区块链应用(三)--mysql初始化及gorm框架使用: https://learnblockchain.cn/article/3448

[5]

从零开发区块链应用(四)--自定义业务错误信息: https://learnblockchain.cn/article/3449

[6]

从零开发区块链应用(五)--golang网络请求: https://learnblockchain.cn/article/3457

[7]

从零开发区块链应用(六)--gin框架使用: https://learnblockchain.cn/article/3480

[8]

从零开发区块链应用(七)--gin框架参数获取: https://learnblockchain.cn/article/3481

[9]

从零开发区块链应用(八)--结构体初识: https://learnblockchain.cn/article/3482

[10]

从零开发区块链应用(九)--区块链结构体创建: https://learnblockchain.cn/article/3483

[11]

从零开发区块链应用(十)--golang协程使用: https://learnblockchain.cn/article/3484

[12]

从零开发区块链应用(十一)--以太坊地址生成: https://learnblockchain.cn/article/3485