🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
如果要获取当前请求信息,需要使用 `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() ```