1. 无中间件启动
#使用 r := gin.New() #替代 // 默认启动方式,包含 Logger、Recovery 中间件 r := gin.Default()
2. 中间件启动
func main() { // 创建一个不包含中间件的路由器 r := gin.New() // 全局中间件 // 使用 Logger 中间件 r.Use(gin.Logger()) // 使用 Recovery 中间件 r.Use(gin.Recovery()) // 路由添加中间件,可以添加任意多个 r.GET("/benchmark", MyBenchLogger(), benchEndpoint) // 路由组中添加中间件 // authorized := r.Group("/", AuthRequired()) // exactly the same as: authorized := r.Group("/") // per group middleware! in this case we use the custom created // AuthRequired() middleware just in the "authorized" group. authorized.Use(AuthRequired()) { authorized.POST("/login", loginEndpoint) authorized.POST("/submit", submitEndpoint) authorized.POST("/read", readEndpoint) // nested group testing := authorized.Group("testing") testing.GET("/analytics", analyticsEndpoint) } // Listen and serve on 0.0.0.0:8080 r.Run(":8080") }
3. 自定义组件
package main import ( "fmt" "github.com/gin-gonic/gin" "net/http" "time" ) func MyLogger() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() c.Set("example", "123456") //让原本改执行的逻辑继续执行 c.Next() end := time.Since(t) fmt.Printf("耗时:%V\n", end) status := c.Writer.Status() fmt.Println("状态", status) } } func TokenRequired() gin.HandlerFunc { return func(c *gin.Context) { var token string for k, v := range c.Request.Header { if k == "X-Token" { token = v[0] } else { fmt.Println(k, v) } } if token != "bobby" { c.JSON(http.StatusUnauthorized, gin.H{ "msg": "未登录", }) //挑战 为什么连return都阻止不了后续逻辑的执行 c.Abort() } c.Next() } } func main() { router := gin.Default() //使用logger和recovery中间件 全局所有 router.Use(MyLogger()) router.GET("/logger", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "logger", }) }) router.Run(":8083") //router := gin.Default() ////使用logger和recovery中间件 全局所有 //router.Use(TokenRequired()) // //router.GET("/ping", func(c *gin.Context) { // c.JSON(http.StatusOK, gin.H{ // "message": "pong", // }) //}) // //router.Run(":8083") }
标签:Use,实现,中间件,authorized,func,router,gin From: https://www.cnblogs.com/wlike/p/16825230.html