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

验证成功才能访问

相关推荐
FungLeo1 天前
成为全栈·Go 后端篇·契约一致性与差分测试:两套实现如何互相校验
golang·node.js·go·合约测试·差分测试·成为全栈·api兼容
老王IT1 天前
Go开发环境搭建(window操作系统)
开发语言·后端·golang
喵了几个咪1 天前
GoWind ShortPlay 拆解:Ent privacy/viewer 多租户隔离——从中间件到 SQL 的零信任链
sql·中间件·信任链
利威尔xu1 天前
Go IM 源码实战(7):断线三天重连,水位算错就漏消息
redis·后端·微服务·面试·golang
行思理2 天前
go语言学习难度及适合学习的人群
开发语言·学习·golang
Joy T2 天前
voice-dump-to-todo:把混乱的语音整理成可执行待办,一个实用的 Agent Skill
ide·macos·语音识别·xcode·任务管理·自研skill
@大迁世界2 天前
告别 Go,拥抱 Rust
开发语言·golang·rust
JPower_mr.g2 天前
SmartCall v1.0.9 发布:智能体知识库上线,让 AI 客服先查资料再回答
java·ide·人工智能·macos·架构·开源·xcode
喵了几个咪2 天前
GoWind ShortPlay 拆解:不用模型的推荐闭环——埋点回流、三路召回与已看去重
开发语言·后端·微服务·golang·gowind
ctlover2 天前
langchain 中间件
中间件·langchain·1024程序员节