go-中间件的使用

中间件介绍

  • Gin框架允许开发者在处理请求的过程中加入用户自己的钩子(Hook)函数
  • 这个钩子函数就是中间件,中间件适合处理一些公共的业务逻辑
  • 比如登录认证,权限校验,数据分页,记录日志,耗时统计

1.定义全局中间件

go 复制代码
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

// 4.定义全局中间件
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("我是一个全局中间件")
	}
}

func main() {
	// 1.实力化引擎
	r := gin.Default()
	//  全局使用中间件
	r.Use(MiddleWare())
	//  2. 配置路由
	r.GET("/hello", func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行成功"})
	})
	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

2.定义局部中间件

go 复制代码
func main() {
	// 1.实力化引擎
	r := gin.Default()

	//  2. 配置路由
	r.GET("/hello", func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行成功"})
	})
		// 局部使用中间件
	r.GET("/hook", MiddleWare(), func(c *gin.Context) {
		fmt.Println("执行hello")
		c.JSON(200, gin.H{"msg": "执行hook成功"})
	})

	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

中间件的应用

go 复制代码
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

// 4.定义全局中间件
func Auth() gin.HandlerFunc {
	return func(c *gin.Context) {
		//  1. 获取token
		token := c.Request.Header.Get("token")
		fmt.Println(token)
		if token != "123456" {
			c.String(403, "token验证失败")
			c.Abort() // 终止请求
			return
		}
		c.Next()
	}
}

func main() {
	// 1.实力化引擎
	r := gin.Default()

	//  2. 配置路由
	r.GET("/index", func(c *gin.Context) {
		c.JSON(200, gin.H{"msg": "index无需登录可以访问"})
	})
	r.GET("/home", Auth(), func(c *gin.Context) {
		c.JSON(200, gin.H{"msg": "home需登录验证才能访问"})
	})

	//  3. 启动服务
	fmt.Println("服务启动成功:http://127.0.0.1:8080/hello")
	r.Run(":8080")
}

token验证失败直接反馈403

验证成功才能访问

相关推荐
weixin_7275356232 分钟前
MinIO大文件上传深度拆解:从原理到生产落地的完整指南
java·中间件
microrain3 小时前
从硬编码到热插拔:SagooIoT插件架构如何打破物联网平台的扩展瓶颈
物联网·golang·开源·sagooiot
geovindu4 小时前
go:Backtracking Algorithm
开发语言·后端·算法·golang·回溯算法
qq_452396234 小时前
第六篇:《并发编程核心:Goroutine 与 Channel》
golang
llwszx4 小时前
【Java/Go后端手撸原生Agent(第五篇):多工具并行调用 + BashTool执行引擎 + Judge证据链升级】
java·后端·golang·状态机·pydantic·agnet·llm-as-judge
FfHUCisI4 小时前
Go语言程序结构 —— 变量、声明与零值机制
golang
超人不会飞_Jay5 小时前
Go课程2
开发语言·后端·golang
晴空了无痕18 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
jieyucx18 小时前
Nuxt4阶段六:工程化与进阶 —— 模块、中间件、插件、TS 与测试
中间件·vue·web·nuxt·全栈·ssr
qq_4523962321 小时前
第五篇:《接口与错误处理:Go 的哲学》
开发语言·后端·golang