Golang之Gin框架源码解读——第二章

本文是Gin框架源码解读系列的第二章,主要探讨Gin中间件的设计思想和实现方式。Gin中间件基于数据结构实现,每个路由节点包含中间件处理函数和路由处理函数链。设计上采用的是洋葱模型,区别于常见的链式处理。此外,还介绍了路由分组功能以及在编写中间件时需要注意的节点处理函数数量限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gin是使用Go语言编写的高性能的web服务框架,根据官方的测试,性能是httprouter的40倍左右。要使用好这套框架呢,首先我们就得对这个框架的基本结构有所了解,所以我将从以下几个方面来对Gin的源码进行解读。

  • 第一章:Gin是如何储存和映射URL路径到相应的处理函数的
  • 第二章:Gin中间件的设计思想及其实现
  • 第三章:Gin是如何解析客户端发送请求中的参数的
  • 第四章:Gin是如何将各类格式(JSON/XML/YAML等)数据解析返回的

Gin Github官方地址

Gin中间件的设计思想及其实现

在第一章中我们谈到Gin的中间件是基于RouterGroup数据结构实现的,这里我们再来回顾一下这个数据结构:

type HandlerFunc func(*Context)

type HandlersChain []HandlerFunc

type RouterGroup struct {
   
    //中间件处理链
    Handlers HandlersChain
    //当前的路由基地址
    basePath string
    //Gin框架的核心引擎
    engine   *Engine
    //当前
	root     bool
}

下面,我们以官方的示例代码来逐步研究其运行机制

func main() {
   
	//创建一个不包含任何中间件的Engine
	r := gin.New()
    //添加日志中间件
	r.Use(gin.Logger())
    //添加错误回复重定向中间件
    r.Use(gin.Recovery())
    //以上这三部可以使用r := gin.Default()一步实现
    //对/benchmark路由添加两个处理函数
    r.GET("/benchmark", MyBenchLogger(), benchEndpoint)
    //创建路由分组
    authorized := r.Group("/")
    //使用AuthRequired中间件
    authorized.Use(AuthRequired
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值