开始
核心概念.jpg
四个核心概念,看源码想不明白的时候,就回头多看几眼,有助于成长.
Engine
Engine顾名思义:引擎. 是gin框架的基础,这还真不是一句废话,确实是这样.Engine在项目启动时候生成,支撑gin框架的运转.
httpRoter(在gin里就是Routergroup)
gin框架使用的是定制版本的httprouter,原理是大量使用公共前缀的树结构,它基本上是一个紧凑的Trie tree(或者只是Radix Tree 基数树)。具有公共前缀的节点也共享一个公共父节点。
下面的七个词插入会让这个路由变成这个样子:
radix_tree.png
如果想知道实现细节,看源码就好了.
不知道细节也没关系,不耽误我们增删改查.你只要知道用一个算法,你做路由注册的时候,最后路由器为每种请求方法管理一棵单独的树.一共九种http请求方式,那就是九个这样的树.(添加树节点操作).当请求过来的时候,天然的已经增加了查找的效率,找到对应的树后,又用这个树再猛的查一下,完犊子,就很快.这就够了.(查找树节点)
Context
context就是某个请求的上下文结构.Context中一个是Request,一个是ResponseWriter.很明显,请求\返回都有了.剩下的所有的方法都是围绕这两个东西发生的.一个请求一个Context.
Handlerfunc
处理函数.不仅是我们的增删改查方法.框架写好的中间件,你自己写的自定义中间件都在这个范畴.
每个请求进来匹配到路由后,我们会将一个路由的中间件函数和处理函数结合到一起组成一条处理函数链条HandlersChain,而它本质上就是一个由HandlerFunc组成的切片.
然后通过调用context.Next()来进行递归调用这个handlers.