gin自定义中间件

gin自定义中间件

代码

go 复制代码
package main

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

// MyLogger 自定义中间件:方式二:通过定义函数,返回gin.HandlerFunc类型的函数,定义中间件
// type HandlerFunc func(*Context)
func MyLogger() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("自定义中间件执行的逻辑")
		// 执行主体流程
		c.Next()
	}
}

func main() {
	/*gin自定义中间件*/
	r := gin.Default()
	// 自定义中间件,在gin的全局使用,
	// 自定义中间件:方式一:通过匿名函数定义中间件
	r.Use(func(c *gin.Context) {
		/*	如:统计请求执行时间 */
		// 获取当前时间
		t := time.Now()
		// 执行主体流程
		c.Next()
		end := time.Since(t)
		fmt.Printf("耗时:%v\n", end)
		// 获取响应的状态
		status := c.Writer.Status()
		fmt.Println("状态:", status)
	})
	//	配置请求路由
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"data": "pong",
		})
	})

	/*配置指定路由使用的中间件*/
	{
		// 配置define组的路由
		defineGroup := r.Group("/define")
		// 在组路由中使用自定义中间件(非全局),不会影响到其他路由,注意需要在配置组内路由前,进行中间件的配置,否则不会生效
		defineGroup.Use(MyLogger())
		// 配置组内路由
		defineGroup.GET("/haha", func(c *gin.Context) {
			c.JSON(http.StatusOK, gin.H{
				"data": "haha",
			})
		})
	}

	//	 运行gin
	_ = r.Run(":8082")
}
相关推荐
Go_error2 小时前
在 Go 服务层中如何优雅地管理事务?
后端·go
王的宝库9 小时前
Gin + GORM
开发语言·golang·gin
妙码生花9 小时前
golang 应用服务端部署(使用 systemd 服务)
开发语言·人工智能·后端·golang·node.js·php·gin
超级无敌霹雳大狗熊9 小时前
以最小demo讲解Eino中的graph编排
go·agent
神秘的猪头9 小时前
Gin 项目为什么要分 Handler、Service、Repository?顺便讲透接口、依赖注入与指针
后端·go
妙码生花1 天前
PHP 各框架下和 Go 的性能比较
前端·后端·go
江湖十年1 天前
Go 还是 Golang?可能你一直都搞错了!
后端·面试·go
数字化小张2 天前
Go语言并发编程——goroutine与channel实战
go