Gin教程(6)—请求参数

  1. 什么是请求参数
  2. 示例代码
  3. 详解/说明

什么是请求参数

请求URL中“?”后边的部分,就是Query。假设有如下的URL:https://mhost.com/article/id/2159?version=adf87asdfnhadfa 其中的version=adf87asdfnhadfa部分就是query。

示例代码

package main

import (
   "github.com/gin-gonic/gin"
   "net/http"
)

var (
   webEng *gin.Engine
)

func main() {
   webEng = gin.Default()

   //获取文章列表
   webEng.GET("/articles", Articles)

   webEng.Run(":8080")
}

//查询文章列表,假设请求URL:host/articles?category=news&pageSize=10&pageNum=1
func Articles(c *gin.Context) {
   //如果参数不存在,或者为空,则返回空字符串
   pSize := c.Query("pageSize")
   //如果参数不存在,设置参数的默认值
   pNum := c.DefaultQuery("pageNum","1")

   var has bool
   //获取参数的同时,检测参数是否存在
   if pSize,has = c.GetQuery("pageSize");!has{
      c.AbortWithStatusJSON(http.StatusBadRequest,gin.H{
         "error": "lost page size",
      })
      return
   }

   //获取query数组
   // /articles?pageNum=1&pageSize=100&category=news&category=tech&category=music
   categories := c.QueryArray("category")
   //获取query数组,同时检测是否存在
   if categories,has = c.GetQueryArray("category");!has{
      c.AbortWithStatusJSON(http.StatusBadRequest,gin.H{
         "error": "lost category",
      })
      return
   }

   //获取query map数据
   // /articles?pageNum=1&pageSize=100&category=news&category=tech&category=music&date['start']=2019-07-06&date['end']=2019-11-10
   date := c.QueryMap("date")
   //获取query map数据,并检测是否设置
   if date,has = c.GetQueryMap("date");!has{
      c.AbortWithStatusJSON(http.StatusBadRequest,gin.H{
         "error": "lost date",
      })
      return
   }

   c.JSONP(http.StatusOK, gin.H{
      "pageSize":pSize,
      "pageNum":pNum,
      "category":categories,
      "categoryCount":len(categories),
      "date":date,
   })
}

postman 构造请求和响应结果

curl 请求和响应

#请求
curl -X GET \
  'http://127.0.0.1:8080/articles?pageNum=1&pageSize=100&category=news&category=tech&category=music&&date[end]=2019-11-10&date[start]=2019-07-06' 
#响应
  {"category":["news","tech","music"],"categoryCount":3,"date":{"end":"2019-11-10","start":"2019-07-06"},"pageNum":"1","pageSize":"100"}

详解/说明

  1. gin默认提供的Query请求处理方法有7种(数据绑定除外):

    • Context.Query(), Context.GetQuery()
    • Context.QueryArray(), Context.GetQueryArray()
    • Context.QueryMap(), Context.GetQueryMap()
    • Context.DefaultQuery()
  2. 其中DefaultQuery() 可以设置参数默认值。

  3. 以 ‘Get’ 开始的函数在获取参数值的同时检测是否有设置。

  4. 直接以‘Query’开始的函数是对应‘Get’函数的封装,只是忽略了参数存在性的检测。

代码下载:https://github.com/IrvinYoung/gin-lessons


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 irvin.em@live.com

文章标题:Gin教程(6)—请求参数

文章字数:591

本文作者:dino

发布时间:2019-11-25, 17:49:43

最后更新:2019-11-25, 18:00:50

原始链接:https://blog.walkbc.com/2019/11/25/gin-lesson-queryParameters/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录