gin中间件篇

这篇具有很好参考价值的文章主要介绍了gin中间件篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 全局中间件

  • 所有请求都经过此中间件
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", "中间件")
        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()
}

输出结果:

gin中间件篇,gin从入门到实践,gin,中间件

gin中间件篇,gin从入门到实践,gin,中间件

2. 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()
}

输出结果:

gin中间件篇,gin从入门到实践,gin,中间件

gin中间件篇,gin从入门到实践,gin,中间件

3. 局部中间件

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()
}

效果演示:

gin中间件篇,gin从入门到实践,gin,中间件

gin中间件篇,gin从入门到实践,gin,中间件

4. 中间件练习

  • 定义程序计时中间件,然后定义2个路由,执行函数后应该打印统计的执行时间,如下:
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 main() {
    // 1.创建路由
    // 默认使用了2个中间件Logger(), Recovery()
    r := gin.Default()
    // 注册中间件
    r.Use(myTime)
    // {}为了代码规范
    shoppingGroup := r.Group("/shopping")
    {
        shoppingGroup.GET("/index", shopIndexHandler)
        shoppingGroup.GET("/home", shopHomeHandler)
    }
    r.Run(":8000")
}

func shopIndexHandler(c *gin.Context) {
    time.Sleep(5 * time.Second)
}

func shopHomeHandler(c *gin.Context) {
    time.Sleep(3 * time.Second)
}

效果演示:

gin中间件篇,gin从入门到实践,gin,中间件

参考文章:

https://www.fansimao.com/928855.html 

gin Next()方法 - 范斯猫文章来源地址https://www.toymoban.com/news/detail-812112.html

到了这里,关于gin中间件篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • gin框架39--重构 BasicAuth 中间件

    每当我们打开一个网址的时候,会自动弹出一个认证界面,要求我们输入用户名和密码,这种BasicAuth是最基础、最常见的认证方式,gin框架中提供了一种内置的方式,但它只能用内置的用户和密码,无法使用外部db中的用户和密码,这种方式很多时候是不友好的。 为此,本文

    2024年02月08日
    浏览(43)
  • gin中使用限流中间件

    限流又称为流量控制(流控),通常是指限制到达系统的并发请求数,本文列举了常见的限流策略,并以gin框架为例演示了如何为项目添加限流组件。 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。 我们生活中也会经常遇到限流的场景,比如:某景区

    2024年01月25日
    浏览(43)
  • gin 中间件流程控制:Next()、 Abort()

    源码注释: Next 应该只在中间件内部使用。它执行调用处理程序内部链中的挂起处理程序。 通俗的说,就是中间件放行,当一个中间件代码执行到 Next() ,会先执行它之后的函数,最后再来执行完本函数。 eg: 如果其中一个中间件响应了c.Abort(),后续中间件将不再执行,直接按

    2024年02月15日
    浏览(59)
  • go gin 全局中间件,以及设置值

    2024年02月11日
    浏览(38)
  • Golang中Gin 参数绑定和验证的中间件

    1. 学习在Golang中使用Gin参数绑定和验证的中间件,了解不同参数类型的绑定和验证方式。 Gin框架提供了很多常用的中间件,其中就包括参数绑定和验证的中间件。在使用Gin框架中进行数据绑定和验证时,可以使用Gin内置的Binding、Validating和Uri中间件。 1. Binding Binding中间件用于

    2024年02月08日
    浏览(49)
  • 简单记录下gin中使用中间件记录操作日志

    1、直接定义中间件 2、在需要使用的地方直接使用就可以,自动会收集日志到数据库中

    2024年02月09日
    浏览(47)
  • Gin框架: 控制器, 中间件的分层设计案例

    对控制器的分组与继承 1 )设计项目目录结构 2 )主程序 main.go 3 ) HTML模板目录配置 tpls/web/index.html 4 ) routers 配置 4.1 webRouters.go 4.2 apiRouters.go 4.2 adminRouters.go 5 ) controller 配置 5.1 web/webCtrl.go 5.2 api/apiCtrl.go 5.3 admin/indexCtrl.go 5.4 admin/baseCtrl.go 5.4 admin/userCtrl.go 以上就是对控制器的一

    2024年02月21日
    浏览(59)
  • gin自定义中间件解决requestBody不可重复读问题

    先直接上代码 注意,上面的中间件,需要在第一个执行。 在gin中,context.Request.Body 是一个io.ReadCloser的接口,如下图 查看io.ReadCloser接口定义 我们发现io.ReaderCloser接口的本质就是 Read(p []byte) (n int, err error) 和 Close() error 的组合。 所以我们只需要自己编写实现 Read(p []byte) (n in

    2024年02月01日
    浏览(81)
  • Go学习第十七章——Gin中间件与路由

    Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等 即比如,如果访问一个网页的话,不管访问什么路径都需要进行登录,

    2024年02月07日
    浏览(47)
  • Gin CORS 跨域请求资源共享与中间件

    1.1 什么是浏览器的同源策略? 同源策略 (Same origin policy) 是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现 浏览器最基本的安

    2024年01月25日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包