如果要获取当前请求信息,需要使用 `c *gin.Context`中的方法,例如:
## 获取URL路径参数
```
// 获取 /user/:id这类型路由绑定的参数
func (c *Context) Param(key string) string
```
## 获取请求参数
#### 获取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`函数,判断参数是否存在的逻辑是,参数值为空,参数也算存在,只有没有提交参数,才算参数不存在。
*****
#### 获取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 {
// 参数不存在
}
}
```
*****
#### 将请求参数绑定到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字段的关系。
| 标签 | 说明 |
| --- | --- |
| `json:"name"` | 数据格式为`json`格式,并且`json`字段名为`name` |
| `form:"name"` | 表单参数名为`name` |
你可以根据自己的需要选择支持的数据类型,例如需要支持`json`数据格式,可以这样定义字段标签: `json:"name"`
如果你通过`http`请求`body`传递`json`格式的请求参数,并且通过`post`请求的方式提交参数,则需要将`Content-Type`设置为`application/json`, 如果是`xml`格式的数据,则设置为`application/xml`
```
func (lc *BaseAPIController) Index(c *gin.Context) {
// 请求对象
type Params struct {
Name string `json:"name"`
}
var request Params
if err := c.Bind(&request); err != nil {
c.String(http.StatusBadRequest, err.Error())
}
c.JSON(200, gin.H{
"message": request.Name,
})
}
```
## 获取请求头信息
获取请求头的常用函数
```
func (c *Context) GetHeader(key string) string
```
示例:
```
func Handler(c *gin.Context) {
//获取请求头Host的值
host := c.GetHeader("Host")
//控制台输出host的值
fmt.Println(host)
}
```
或者可以这样用:
```
c.Request.Header.Get("Host")
```
## 获取客户端IP
```
c.ClientIP()
```
- 序言
- 基础
- 安装GoHub
- 目录结构
- 开发规范
- 部署项目
- 架构
- 架构总览
- 生命周期
- 配置
- 配置介绍
- 配置目录
- 配置格式
- 配置加载
- 读取配置
- 动态配置
- 环境变量配置
- 路由
- 路由模式
- 路由定义
- 路由参数
- 路由分组
- 路由限流
- 路由拆分
- 控制器
- 控制定义
- 控制器初始化
- 中间件
- Make创建控制器
- 请求
- 请求信息
- 数据库
- 连接数据库
- 基本使用
- Make创建模型
- 日志
- 介绍
- 日志驱动
- 日志写入
- HTTP日志
- 数据库请求日志
- 错误和调试
- Debuger调试器
- 验证
- 验证器
- 验证规则
- Make创建验证器
- 杂项
- 缓存
- 分页
- 验证码
- CURL请求
- 命令行
- 基础知识
- console 包
- Cobra 基础
- 命令行模式
- 附录
- 配置参考
- 第三方依赖库