广告位联系
返回顶部
分享到

Go中gin框架的*gin.Context参数常见实用方法

Golang 来源:互联网 作者:佚名 发布时间:2024-07-14 09:08:36 人浏览
摘要

梗概: *gin.Context是处理HTTP请求的核心。ctx代表context(上下文),它包含了处理请求所需的所有信息和方法,例如请求数据、响应构建器、路由参数等。 基本的格式: 1 2 3 func SomeHandler(ctx *g

梗概:

*gin.Context是处理HTTP请求的核心。ctx代表"context"(上下文),它包含了处理请求所需的所有信息和方法,例如请求数据、响应构建器、路由参数等。

基本的格式:

1

2

3

func SomeHandler(ctx *gin.Context) {

    // 使用ctx来处理请求和构建响应

}

常见的使用:

1. 读取查询参数

从请求中读取查询字符串参数。

1

2

3

4

5

6

func ReadQueryParams(ctx *gin.Context) {

    value := ctx.Query("someParam") // 获取查询参数

    ctx.JSON(http.StatusOK, gin.H{

        "someParam": value, // 回显参数

    })

}

2. 读取POST表单数据

对于POST请求中发送的表单数据的访问

1

2

3

4

5

6

func ReadPostForm(ctx *gin.Context) {

    value := ctx.PostForm("somePostParam") // 获取POST表单参数

    ctx.JSON(http.StatusOK, gin.H{

        "somePostParam": value,

    })

}

3. 读取JSON请求体

如果请求有JSON体,将其绑定到一个结构体。

1

2

3

4

5

6

7

8

9

10

11

12

13

type RequestBody struct {

    Message string `json:"message"`

}

func ReadJSONBody(ctx *gin.Context) {

    var body RequestBody

    if err := ctx.BindJSON(&body); err != nil {

        ctx.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON"}) // 绑定JSON失败

        return

    }

    ctx.JSON(http.StatusOK, gin.H{

        "message": body.Message,

    })

}

4. 写入JSON响应

向客户端写入JSON响应。

1

2

3

4

5

6

func WriteJSONResponse(ctx *gin.Context) {

    ctx.JSON(http.StatusOK, gin.H{

        "status": "success",

        "data": "some data",

    })

}

5. 流式响应

对于大型响应,您可以向客户端流式传输数据。

1

2

3

4

5

6

func StreamResponse(ctx *gin.Context) {

    for i := 0; i < 10; i++ {

        ctx.SSEvent("message", gin.H{"data": "Streaming " + strconv.Itoa(i)})

        time.Sleep(1 * time.Second)

    }

}

6. 访问路由参数

可以使用Param方法访问路由参数。

1

2

3

4

5

6

func RouteParameter(ctx *gin.Context) {

    productID := ctx.Param("id") // 获取路由参数

    ctx.JSON(http.StatusOK, gin.H{

        "product_id": productID,

    })

}

7. 设置Cookies

您可以设置和获取cookies。

1

2

3

4

5

6

7

func CookieExample(ctx *gin.Context) {

    ctx.SetCookie("username", "user1", 3600, "/", "localhost", false, true) // 设置cookie

    username := ctx.GetCookie("username") // 获取cookie

    ctx.JSON(http.StatusOK, gin.H{

        "cookie_username": username,

    })

}

8. 错误处理

您可以处理错误并返回适当的响应。

1

2

3

4

5

6

7

func ErrorHandling(ctx *gin.Context) {

    if someCondition {

        ctx.JSON(http.StatusBadRequest, gin.H{"error": "Bad request"}) // 发送错误响应

    } else {

        ctx.JSON(http.StatusOK, gin.H{"message": "Success"}) // 发送成功响应

    }

}

9. 文件上传

也支持处理文件上传。

1

2

3

4

5

6

7

8

9

func FileUpload(ctx *gin.Context) {

    file, err := ctx.FormFile("file") // 获取上传的文件

    if err != nil {

        ctx.JSON(http.StatusBadRequest, gin.H{"error": "Error uploading file"}) // 文件上传失败

        return

    }

    ctx.SaveUploadedFile(file, "path/to/save/"+file.Filename) // 保存文件

    ctx.JSON(http.StatusOK, gin.H{"message": "File uploaded successfully"}) // 文件上传成功

}

10. 使用中间件

*gin.Context经常在中间件中使用,以执行请求处理前后的动作。

1

2

3

4

5

6

7

8

9

10

11

12

13

func MyMiddleware(c *gin.Context) {

    c.Set("myKey", "myValue") // 在中间件中设置值

    c.Next()                   // 调用下一个中间件或处理器

}

func main() {

    router := gin.Default()

    router.Use(MyMiddleware) // 使用自定义中间件

    router.GET("/somepath", func(c *gin.Context) {

        value := c.Get("myKey") // 从中间件获取值

        c.JSON(http.StatusOK, gin.H{"myKey": value})

    })

    router.Run()

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 :
    Tag :
相关文章
  • go-zero自定义中间件的几种方式
    1.通过 api 文件生成并填入具体逻辑 定义 api 首先你需要在 api 文件中定义你需要的路由位置和中间件的名字: 1 2 3 4 5 6 7 8 9 // test for ping @
  • Go中gin框架的*gin.Context参数常见实用方法
    梗概: *gin.Context是处理HTTP请求的核心。ctx代表context(上下文),它包含了处理请求所需的所有信息和方法,例如请求数据、响应构建器、
  • Python实现图像添加水印的方法
    在日常图像处理中,为图片添加水印是一项常见任务。有多种方法和工具可供选择,而今天我们将专注于使用Python语言结合PIL库批量添加水
  • go的defer和return的执行顺序介绍
    go的defer和return的执行顺序 go的defer和return是golang中的两个关键字,return用于返回函数的返回值,也可以参与一定的流程控制,比如下面代码
  • 使用go语言实现Redis持久化的代码
    redis是一个内存数据库,如果你把进程杀掉,那么里面存储的数据都会消失,那么这篇文章就是来解决redis持久化的问题 我们在redis.conf文件
  • Go中的Timer和Ticker介绍
    一:简介 在日常开发中,我们可能会遇到需要延迟执行或周期性地执行一些任务。这个时候就需要用到Go语言中的定时器。 在Go语言中,定
  • Golang在gin框架中使用JWT鉴权
    什么是JWT JWT,全称 JSON Web Token,是一种开放标准(RFC 7519),用于安全地在双方之间传递信息。尤其适用于身份验证和授权场景。JWT 的设计
  • Golang使用Redis与连接池方式
    Golang使用Redis与连接池 使用下载go的redis包go get github.com/gomodule/redigo/redis 如果网不好的话就很费劲了 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2
  • Golang使用embed引入静态文件的代码
    Go 语言从 1.16 版本开始引入了一个新的标准库embed,可以在二进制文件中引入静态文件 指令:/go:embed 通过一个简单的小实例,来演示将静态
  • Golang发送Get和Post请求的实现
    最近在研究钉钉机器人,发现钉钉的第三方接口有时需要用Get或者Post请求访问,虽然说可以通过Apifox直接模拟发送请求,但是我还是想研究
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计