Go语言gin框架获取参数 | 青训营笔记

113 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第15天

获取参数

获取queryString参数

GET请求,URL中?后面携带的参数

//https://cn.bing.com/search?q=hello
func main() {
        //Default返回一个默认的路由引擎
        r := gin.Default()
        r.GET("/user/search", func(c *gin.Context) {
        //获取浏览器发回的query String参数
                //不是?username=,如?xxx=就默认返回第二项
                name := c.DefaultQuery("username", "no name")
                //获取参数
                //username := c.Query("username")
                //name,ok:=c.GetQuery("query") //取不到返回"",false
                //if !ok{
                //    name ="NoName"}
                address := c.Query("address")
                //输出json结果给调用方
                c.JSON(http.StatusOK, gin.H{
                        "message":  "ok",
                        "username": name,
                        "address":  address,
                })
        })
        r.Run()}

获取form参数

发送一个POST请求,通过form表单提交

func main() {
        //Default返回一个默认的路由引擎
        r := gin.Default()
        r.GET("/login",func(c *gin.Context){
            c.HTML(http.StatusOK,"login.html",nil)
        })
        //一次请求,对应一个响应
        r.POST("/login", func(c *gin.Context) {
                // DefaultPostForm取不到值时会返回指定的默认值
                //username := c.DefaultPostForm("username", "小明")
                username := c.PostForm("username")
                password := c.PostForm("password")
                //username, ok:=c.GetPostForm("username")
                //if !ok{username="NO"}
                //输出json结果给调用方
                c.JSON(http.StatusOK, gin.H{
                        "message":  "ok",
                        "username": username,
                        "password": password,
                })
        })
        r.Run(":8080")}

获取path(URL)路径参数

请求的参数通过URL路径传递,例如:/user/search/names/ages

r.GET("/:name/:age",func(c *gin.Context){
    //获取路径参数
    name:=c.Param("name")
    age :=c.Param("age")    //string类型
    cJSON(http.StatusOK,gin.H){
        "name":name,
        "age":age,
    }
})

参数绑定

将参数与结构体绑定 基于请求的Content-Type识别请求数据类型, 并利用反射机制自动提取请求中QueryString、form表单、JSON、XML等参数到结构体

.ShouldBind()函数能够基于请求自动提取JSON、form表单和QueryString类型的数据,并把值绑定到指定的结构体对象。

type UserInfo struct{
Username string `form:"username" json:"username" binding:"required"`
Password string `form:"password"`
}
    //绑定query String
    r.GET("/form",func (c *gin.Context)  {//改成POST一样的写法
        var u UserInfo
        //通过反射查找结构体对应的
        err:=c.ShouldBind(&u)
        if err!=nil{
            c.JSON(http.StatusBadRequest,gin.H{
                "error":err.Error(),
            })
        }else{
            fmt.Printf("%#v\n",u)
            c.JSON(http.StatusOK,gin.H{
                "status":"ok",
            })
        }
    //绑定json核form表单只是把GET改为POST
    })