前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang Gin框架 中间件

Golang Gin框架 中间件

作者头像
地球流浪猫
发布2023-10-14 19:21:23
2420
发布2023-10-14 19:21:23
举报
文章被收录于专栏:流浪猫的golang流浪猫的golang
什么是中间件

在开发中,中间件是一种常见的模式。

中间件通常被称为在请求到达处理程序之前执行的一些代码,或者在响应离开处理程序之前执行的代码

中间件的功能实现举例:

  • 身份验证:检查请求是否携带了正确的身份验证信息
  • 记录日志:记录请求和响应的内容和元数据,方便系统的调试和分析。
  • 编解码和加解密:对请求和响应的数据进行编解码和加解密
Gin中间件代码示例
代码语言:javascript
复制
import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func Logger() gin.HandlerFunc {
    return func(c *gin.Context) {
        fmt.Println("Request URL:", c.Request.URL)
        c.Next()
    }
}

func main() {
    router := gin.Default()

    router.Use(Logger())

    router.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello, World!",
        })
    })

    router.Run(":8080")
}
身份验证中间件
代码语言:javascript
复制
// 定义身份验证中间件
func authMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		token := c.Request.Header.Get("token")
		if token == "valid_token" {
			// token 验证通过,将用户信息保存到上下文中
			c.Set("user", "admin")
			c.Next()
		} else {
			// token 验证失败,返回错误响应
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
				"message": "Unauthorized",
			})
		}
	}
}
默认中间件

gin.Default()默认使用了 Logger 和 Recovery 中间件

代码语言:javascript
复制
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

Logger 中间件将日志写入 gin.DefaultWriter,即使配置了 GIN_MODE=release。 Recovery 中间件会 recover 任何 panic。如果代码有 panic 的话,返回500 响应码。

如果不想使用默认中间件

代码语言:javascript
复制
router := gin.New()
gin中间件中数据传递

可以使用context进行上下文传递,举例如下

代码语言:javascript
复制
func LogMiddleware() gin.HandlerFunc {
   return func(c *gin.Context) {
      fmt.Println("Request URL:", c.Request.URL)
      c.Set("Logged", "yes")
      c.Next()
   }
}
代码语言:javascript
复制
router.GET("/", func(c *gin.Context) {
    	fmt.Println(c.Get("Logged"))
        c.JSON(200, gin.H{
            "message": "Hello, World!",
        })
    })
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-04-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是中间件
    • Gin中间件代码示例
      • 身份验证中间件
        • 默认中间件
          • gin中间件中数据传递
          相关产品与服务
          消息队列 TDMQ
          消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档