03-Gin中间件

一:全局中间件

1.1: 简单的中间件案例

  • 实现的功能:在每个请求之前,追加一个随机值。
  • 随机值中间件的实现
package middleware

import (
	"github.com/gin-gonic/gin"
	"math/rand"
	"time"
)

func init() {
	rand.Seed(time.Now().UnixNano())
}

var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

func RandStringRunes(n int) string {
	b := make([]rune, n)
	for i := range b {
		b[i] = letterRunes[rand.Intn(len(letterRunes))]
	}
	return string(b)
}

// RandomMiddleWare MiddleWare 随机值中间件,每个请求进来, 我们都产生一个随机值, 存放在上下文中。
func RandomMiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 随机值中间件会在请求上下文中, 设置一个随机值
		c.Set("randomValue", RandStringRunes(20))
	}
}

  • 将中间件注册到引擎中
package routers

import (
	"github.com/gin-gonic/gin"
	"learn_gin/middleware"
)

type Option func(*gin.Engine)

var options []Option

// Include 将APP中的路由放入options切片中
func Include(opts ...Option) {
	options = append(options, opts...)
}

// Init 初始化引擎, 并将路由注册到引擎中
func Init() *gin.Engine {
	engine := gin.Default()
	// 注册中间件
	engine.Use(middleware.RandomMiddleWare())
	for _, opt := range options {
		opt(engine)
	}
	return engine
}

1.2: 控制请求之后再运行中间件的后半部分

  • Next()函数控制
  • 代码案例:
// RandomMiddleWare MiddleWare 随机值中间件,每个请求进来, 我们都产生一个随机值, 存放在上下文中。
func RandomMiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 随机值中间件会在请求上下文中, 设置一个随机值
		c.Set("randomValue", RandStringRunes(20))
		// 阻断
		c.Next()
		fmt.Printf("返回请求后再执行\n")
	}
}
  • 运行效果:
该请求的随机值是PVaxecLBhcWXDbIkaxHU
返回请求后再执行
[GIN] 2022/09/08 - 18:05:56 | 200 |     218.628µs |       127.0.0.1 | GET      "/animal/login?name=root&password=123456"

二:局部中间件

  • 1: 局部中间件不注册到引擎中
  • 2: 局部中间件再路由中添加即可, 这边只有某些路由会走这个中间件。
func Routers(e *gin.Engine) {
	e.GET("/animal/login", middleware.RandomMiddleWare(), testArgs)
}

三: 常用的中间件

  • 参考官网推荐
    • https://github.com/gin-gonic/contrib/blob/master/README.md
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奈何碎银没有几两

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值