码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Gin中间件开发


    合集 - Golang学习(34)
    1.iota简介07-102.go generate命令简介07-113.golang uuid库介绍07-244.gRPC基本教程07-255.protolator简介07-316.Govulncheck v1.0.0 发布了!08-037.每日一库:GORM简介08-078.Go泛型简介08-099.Go 1.21发布!08-1010.Golang zip压缩文件读写操作2020-12-2311.本地搭建playground2021-01-1712.zap自定义日志级别02-0913.Gorm日志设置02-0914.gin启动https支持2022-11-3015.Go Plugin介绍2021-12-1416.Golang漏洞管理07-3017.可以丢掉123456了07-0418.如何优雅地退出程序06-2719.PGO前瞻06-2520.go多版本管理05-1621.openAI发布v0.2.0了05-11
    22.Gin中间件开发08-11
    23.Fabric区块链浏览器(1)08-1524.每日一库:Memcache08-1725.protojson简介08-1826.每日一库:gosec08-2127.Fabric区块链浏览器(2)08-2228.每日一库:fsnotify简介08-2629.gRPC with JWT08-2730.embed简介08-2931.Fabric区块链浏览器(3)08-3032.每日一库:pprof简介09-0133.go 1.21:cmp09-0234.完全可复制、经过验证的 Go 工具链09-05
    收起

    Gin是一个用Go语言编写的Web框架,它提供了一种简单的方式来创建HTTP路由和处理HTTP请求。中间件是Gin框架中的一个重要概念,它可以用来处理HTTP请求和响应,或者在处理请求之前和之后执行一些操作。

    以下是关于Gin中间件开发的一些基本信息:

    • 中间件的定义:在Gin中,中间件是一个函数,它接受一个gin.Context参数,并返回一个函数。这个函数在处理HTTP请求时被调用。
    • 中间件的使用:你可以使用gin.Engine.Use()函数来添加全局中间件,或者使用gin.RouterGroup.Use()函数来添加特定路由组的中间件。
    • 中间件的执行顺序:中间件的执行顺序是按照它们被添加的顺序来的。全局中间件总是先于路由组中间件被执行。
    • 中间件的错误处理:如果中间件在执行过程中出现错误,你可以使用gin.Context.Abort()函数来停止后续的处理。

    那如何开发 Gin 的中间件呢?

    1. 创建中间件函数

    中间件实际上是一个函数,它接收 gin.Context 对象作为参数。gin.Context 包含了当前请求的信息和响应的相关方法。以下是一个简单的中间件示例,用于记录请求的路径和方法:

    func LoggerMiddleware(c *gin.Context) {
    // 在请求处理前打印请求路径和方法
    fmt.Printf("Request: %s %s\n", c.Request.Method, c.Request.URL.Path)
    // 继续处理请求
    c.Next()
    // 在响应发送后打印响应状态码
    fmt.Printf("Response status: %d\n", c.Writer.Status())
    }

    2. 注册中间件

    要使用中间件,需要将中间件函数注册到路由组或全局中。以下是如何注册上述 LoggerMiddleware 中间件的示例:

    func main() {
    // 创建 Gin 引擎
    r := gin.Default()
    // 注册中间件到全局
    r.Use(LoggerMiddleware)
    // 定义路由
    r.GET("/hello", func(c *gin.Context) {
    c.String(http.StatusOK, "Hello, World!")
    })
    // 启动服务器
    r.Run(":8080")
    }

    在上述代码中,r.Use(LoggerMiddleware) 将 LoggerMiddleware 中间件注册到了全局,意味着所有的请求都会经过这个中间件的处理。你也可以将中间件注册到特定的路由组,以使其仅对特定路由生效。

    3. 中间件链

    你可以在一个路由上同时使用多个中间件,它们会按照注册的顺序执行。这样,你可以实现多个中间件的组合来完成不同的功能。以下是一个使用多个中间件的示例:

    func AuthMiddleware(c *gin.Context) {
    // 在这里进行身份验证逻辑
    // ...
    // 继续处理请求
    c.Next()
    }
    func main() {
    r := gin.Default()
    // 注册多个中间件
    r.Use(LoggerMiddleware, AuthMiddleware)
    // ...
    }

    4. 中间件的顺序

    中间件的注册顺序很重要,因为它们会按照注册的顺序依次执行。例如,如果你的身份验证中间件需要在日志记录中间件之后执行,那么确保在注册时的顺序是正确的。

    5. 中间件的优先级

    有时,你可能希望某个路由上的中间件执行顺序与全局中的不同。在 Gin 中,你可以使用 gin.RouterGroup 的 Group 方法来创建一个带有自定义中间件的路由组。例如:

    func main() {
    r := gin.Default()
    // 创建带有自定义中间件的路由组
    authGroup := r.Group("/auth", AuthMiddleware)
    // 在路由组上注册其他中间件
    authGroup.Use(LoggerMiddleware)
    // 在路由组上定义路由
    authGroup.GET("/profile", func(c *gin.Context) {
    c.String(http.StatusOK, "User profile")
    })
    r.Run(":8080")
    }

    在上述示例中,AuthMiddleware 会首先执行,然后是 LoggerMiddleware。

    通过上述步骤,你可以轻松地在 Gin 框架中开发中间件来实现各种功能,如身份验证、日志记录、错误处理等。中间件的灵活性使得你可以将常用的功能模块抽象出来,使代码更具可维护性和可扩展性。


    孟斯特

    声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
    Author: mengbin
    blog: mengbin
    Github: mengbin92
    cnblogs: 恋水无意


  • 相关阅读:
    CPD:使用restAPI和cpd-cli命令创建DMC实例
    python安装 learn2learn库 || 在线安装方式或者本地安装
    [论文阅读] 颜色迁移-Correlated Color Space
    redis持久化机制
    深度解析:什么是太爱速M抢单模式?
    ToBeWritten之改进威胁猎杀:自动化关键角色与成功沟通经验
    mvnd 安装和配置
    【爬虫实战】用pyhon爬百度故事会专栏
    【linux】安装openjdk8
    RocketMq概要
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/17622149.html
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号