Gin 获取请求参数

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Gin 获取请求参数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、获取URL?后的参数(不区分请求方式)

// 获取请求url ? 后的参数(url:8080/add?name=kelvin)
func GetUrlParam(ctx *gin.Context) {
    name := ctx.Query("name")
    defaultName := ctx.DefaultQuery("name", "defaultName...")
    ctx.JSON(http.StatusOK, gin.H{
        "name":        name,
        "defaultName": defaultName,
    })
}

2、获取form参数(post方式)

// 获取请求表单的参数
func GetFormParam(ctx *gin.Context) {
    formName := ctx.PostForm("name")
    defaultPostFormName := ctx.DefaultPostForm("name", "default name form ~~~")
    ctx.JSON(http.StatusOK, gin.H{
        "formName":            formName,
        "defaultPostFormName": defaultPostFormName,
    })
}

3、获取json参数

// 获取请求Json参数体
func GetJson(ctx *gin.Context) {
    data, err := ctx.GetRawData()
    if err != nil {
        ctx.JSON(http.StatusInternalServerError, gin.H{
            "msg": "获取json数据异常",
        })
    }
    var m map[string]interface{}
    // 反序列化
    _ = json.Unmarshal(data, &m)
    ctx.JSON(http.StatusOK, gin.H{
        "json": &m,
    })
}

Gin 获取请求参数

 4、获取路径参数

// 获取请求url中的路径参数(url:8080/add/:name/:age)
func GetUrlPathParam(ctx *gin.Context) {
    name := ctx.Param("name")
    age := ctx.Param("age")
    ctx.JSON(http.StatusOK, gin.H{
        "name": name,
        "age":  age,
    })
}

Gin 获取请求参数

 5、获取url指定位置后的路径

// 获取请求url中的路径(url:8080/add/*path,url:8080/add/student/ok,path取出即是/student/ok)
func GetUrlLike(ctx *gin.Context) {
    path := ctx.Param("path")
    ctx.JSON(http.StatusOK, gin.H{
        "path": path,
    })
}

Gin 获取请求参数

 6、struct绑定请求参数

// 将请求参数直接复制给struct对象的属性
type User struct {
    Name string `form:"name"`
    Age  int64  `form:"age"`
}

func BindParamToStruct(ctx *gin.Context) {
    var user User
    // 将请求参数直接赋值给user对象
    err := ctx.BindQuery(&user)
    // 和上个方法一致,只是如果user规定某个字段必传时,上个方法调用时接口响应码为400,本方法可以自行处理异常,正常返回数据
    //err := ctx.ShouldBindQuery(&user)
    if err != nil {
        log.Println(err)
    }
    ctx.JSON(http.StatusOK, gin.H{
        "user": user,
    })
}

7、获取前端url参数数组形式

// url:8080/set?hobby=foot&hobby=apple
func GetUrlArray(ctx *gin.Context) {
    // 获取参数名是“hobby”的参数,结果为数组
    array := ctx.QueryArray("hobby")
    // 同上方法,只不过会有是否获取成功的返回值
    //queryArray, ok := ctx.GetQueryArray("hobby")
    ctx.JSON(http.StatusOK, gin.H{
        "array": array,
    })
}

注意:也可以使用struct绑定形式接受数组,需要在struct中定义数组类型的属性并将该属性的tag名改为请求参数名

8、获取文件数据

// 获取form表单数据及文件
func FileUpload(ctx *gin.Context) {
    form, err := ctx.MultipartForm()
    if err != nil {
        log.Println(err)
    }
    value := form.Value
    filesMap := form.File
    log.Println(filesMap)
    for _, fileArray := range filesMap {
        log.Println(fileArray)
        for _, file := range fileArray {
            ctx.SaveUploadedFile(file, "./files/"+file.Filename)
        }
    }
    ctx.JSON(http.StatusOK, gin.H{
        "value": value,
    })
}

 

 未完待续~~~

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/187594.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!