0
点赞
收藏
分享

微信扫一扫

go语言学习-gin框架中间件

全局中间件

所有的请求都经过此中间件

// 所有请求经过此中间件
package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

//定义中间件

func MiddleWare() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		t := time.Now()
		fmt.Println("中间件开始执行了")
		//设置变量到Context的key中,可以通过Get()取
		ctx.Set("request", "中间件")
		status := ctx.Writer.Status()
		fmt.Println("中间件执行完毕", status)
		t2 := time.Since(t)
		fmt.Println("time:", t2)
	}

}

func main() {
	r := gin.Default()
	r.Use(MiddleWare())
	//{}为了规范代码
	{
		r.GET("/ce", func(ctx *gin.Context) {
			//取值
			req, _ := ctx.Get("request")
			fmt.Println("request:", req)
			//页面接收
			ctx.JSON(200, gin.H{
				"request": req,
			})
		})
	}
	r.Run()
}

测试结果

go语言学习-gin框架中间件_github

Next()方法


package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

// 定义中间
func MiddleWare() gin.HandlerFunc {
	return func(c *gin.Context) {
		t := time.Now()
		fmt.Println("中间件开始执行了")
		// 设置变量到Context的key中,可以通过Get()取
		c.Set("request", "中间件")
		// 执行函数
		c.Next()
		// 中间件执行完后续的一些事情
		status := c.Writer.Status()
		fmt.Println("中间件执行完毕", status)
		t2 := time.Since(t)
		fmt.Println("time:", t2)
	}
}

func main() {
	// 1.创建路由
	// 默认使用了2个中间件Logger(), Recovery()
	r := gin.Default()
	// 注册中间件
	r.Use(MiddleWare())
	// {}为了代码规范
	{
		r.GET("/ce", func(c *gin.Context) {
			// 取值
			req, _ := c.Get("request")
			fmt.Println("request:", req)
			// 页面接收
			c.JSON(200, gin.H{"request": req})
		})

	}
	r.Run()
}

go语言学习-gin框架中间件_github_02


局部中间件

package main

import (
    "fmt"
    "time"

    "github.com/gin-gonic/gin"
)

// 定义中间
func MiddleWare() gin.HandlerFunc {
    return func(c *gin.Context) {
        t := time.Now()
        fmt.Println("中间件开始执行了")
        // 设置变量到Context的key中,可以通过Get()取
        c.Set("request", "中间件")
        // 执行函数
        c.Next()
        // 中间件执行完后续的一些事情
        status := c.Writer.Status()
        fmt.Println("中间件执行完毕", status)
        t2 := time.Since(t)
        fmt.Println("time:", t2)
    }
}

func main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    //局部中间键使用
    r.GET("/ce", MiddleWare(), func(c *gin.Context) {
        // 取值
        req, _ := c.Get("request")
        fmt.Println("request:", req)
        // 页面接收
        c.JSON(200, gin.H{"request": req})
    })
    r.Run()
}

中间件练习


package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

// 定义中间
func myTime(c *gin.Context) {
	start := time.Now()
	c.Next()
	// 统计时间
	since := time.Since(start)
	fmt.Println("程序用时:", since)
}

// 定义处理函数
func ShopIndexHandler(ctx *gin.Context) {
	time.Sleep(5 * time.Second)

}

func ShopHomeHandler(ctx *gin.Context) {
	time.Sleep(3 * time.Second)

}

func main() {
	r := gin.Default()
	r.Use(myTime)
	ShoppingGroup := r.Group("/shopping")
	{
		ShoppingGroup.GET("/index", ShopIndexHandler)
		ShoppingGroup.GET("/home", ShopHomeHandler)
	}
	r.Run()
}

go语言学习-gin框架中间件_取值_03

举报

相关推荐

0 条评论