Gin 获取请求参数

gin,获取,请求,参数 · 浏览次数 : 35

小编点评

## Summary of URL Parameter Handling Functions These functions handle different types of parameters in a URL: 1. **GetUrlParam**: Retrieves a single parameter from the URL query string. 2. **GetFormParam**: Retrieves all form parameters from the request body. 3. **GetJson**: Handles JSON data received in the request body. 4. **getUrlPathParam**: Retrieves a single parameter from the URL path. 5. **GetUrlLike**: Retrieves the entire path after a specific parameter. 6. **BindParamToStruct**: Transfers request parameters to a struct object. 7. **getUrlArray**: Returns an array of values associated with a specific parameter name. 8. **FileUpload**: Handles uploading files along with form data. **Additional Notes:** * These functions are mostly consistent with their respective counterparts except for parameter binding. * For struct binding, an error is returned if the parameter is required but not provided. * The `FileUpload` function handles both form and file upload. * The file upload process saves uploaded files with the filename in the path.

正文

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,
    })
}

 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,
    })
}

 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,
    })
}

 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,
    })
}

 

 未完待续~~~

 

与Gin 获取请求参数相似的内容:

Gin 获取请求参数

1、获取URL?后的参数(不区分请求方式) // 获取请求url ? 后的参数(url:8080/add?name=kelvin) func GetUrlParam(ctx *gin.Context) { name := ctx.Query("name") defaultName := ctx.De

PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践

工作中只要接触过第三方开放平台的都离不开 OpenApi,几乎各大平台都会有自己的 OpenApi 比如微信、淘宝、京东、抖音等。在 OpenApi 对接的过程中最首要的环节就是授权,获取到平台的授权 Token 至关重要。

Gin 框架的执行流程

Gin框架是一个用Go语言编写的高性能Web框架,它基于httprouter实现,具有快速、简洁和高效的特性。 以下是Gin框架处理HTTP请求的大致执行流程: 1 初始化Gin引擎: 用户创建一个新的gin.Engine实例,这通常是应用程序的主路由器。 用户定义路由,这些路由是通过engine.

Gin 框架是怎么使用 net http 包的(gin.go)

Gin 框架是基于 Go 语言的标准库 net/http 构建的,它使用 net/http 提供的基础功能来构建自己的高性能 Web 应用框架。 具体来说,Gin 使用 net/http 的以下方面: 1,HandlerFunc: Gin 使用 net/http 的 HandlerFunc 类型,这

Gin 响应方式

响应 1. 字符串方式 r.GET("/user/save", func(ctx *gin.Context) { ctx.String(http.StatusOK, "this is a %s", "ms string response") }) 2. JSON方式 r.GET("/user/sav

Gin 中间件

中间件 在Gin框架中,中间件(Middleware)指的是可以拦截http请求-响应生命周期的特殊函数,在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。 中间件的常见应用场景如下: 请求限速 api接口签名处理 权限校验 统一错误处理 Gi

gin启动https支持

gin是一个使用Go语言开发的Web框架,具有运行速度快,分组的路由器,良好的崩溃捕获和错误处理,支持中间件等。 在工作中有时候需要支持https服务,gin可以通过中间件的方式来提供对https的支持,这里使用的是secure来提供https服务支持。这里给出一个简单的使用示例: 示例代码 pac

Gin中间件开发

Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求。中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一些操作。 以下是关于Gin中间件开发的一些基本信息: - **中间件的定义**:在Gin中,中间件是

[golang]在Gin框架中使用JWT鉴权

什么是JWT JWT,全称 JSON Web Token,是一种开放标准(RFC 7519),用于安全地在双方之间传递信息。尤其适用于身份验证和授权场景。JWT 的设计允许信息在各方之间安全地、 compactly(紧凑地)传输,因为其自身包含了所有需要的认证信息,从而减少了需要查询数据库或会话存储

validator库在gin中的使用

目录封装语言包翻译器tag中设置验证规则控制层验curl请求返回结果 封装语言包翻译器 package validator import ( "fmt" "net/http" "reflect" "github.com/go-playground/locales/zh_Hans_CN" unTran