介绍gin 框架 基于 httprouter 实现最重要的路由模块,采用类似字典树一样的数据结构来存储路由与handle方法的映射.也是框架高性能的原因,有兴趣的同学可以自行查阅 本文提供 在线思维导图 搭配文章看事半功倍 Engine 容器对象,整个框架的基础 Engine.trees 负责存储路由和handle方法的映射,采用类似字典树的结构 Engine.RouterGroup,其中的Handlers存储着所有中间件 Context上下文对象,负责处理请求和回应,其中的handlers是存储处理请求时中间件和处理方法的 |
初始化容器通过调用
|
注册中间件gin的高性能主要依靠 |
注册全局中间件
|
注册路由组中间件通过 Group()方法返回一个 新生成的RouterGroup指针,用来分开每个路由组加载不一样的中间件 注意这里的Handlers: group.combineHandlers(handlers),这行代码会复制一份全局中间件到新生成的RouterGroup.Handlers中,接下来路由注册的时候就可以一起写入树节点中 |
注册路由以及中间件不管哪种请求方式最终都会调用RouterGroup.handle,这个方法主要有两个作用 处理路由的格式,将路由拼成 ‘/’ 字符开头的路由 复制一份RouterGroup.Handlers,加上相应这次路由的handle方法,组成一个list放入树节点中 最后调用trees.addRoute增加节点 |
启动通过调用 |
处理请求
|
感想
|
字典树是什么?信息学奥林匹克竞赛中的较为常用的数据结构——字典树。字典树也叫Trie树、前缀树。顾名思义,它是一种针对字符串进行维护的数据结构。并且,它的用途超级广泛。建议大家熟练掌握。字典树就是一棵多叉树,只不过,这棵树的每条边上都有一个字母,然后这棵树的一些节点被指定成了标记节点(目标节点,不一定是叶子节点)而已。字典树的功能根据字典树的概念,我们可以发现:字典树的本质是把很多字符串拆成单个字符的形式,以树的方式存储起来。所以我们说字典树维护的是”字典“。那么根据这个最基本的性质,我们可以由此延伸出字典树的很多妙用。简单总结起来大体如下:
我们可以发现,以上列举出的功能都是建立在“字符串集合”的基础上的。再一次强调,字典树是“字典”的树,一切功能都是“字典”的功能。这也为我们使用字典树的时候提供了一个准则:看到一大堆字符串同时出现,就往哈希和Trie树那边想一下。 |
参考文档gin中文文档 https://gin-gonic.com/zh-cn/docs/introduction/ gin项目地址 https://github.com/gin-gonic/gin httprouter https://github.com/julienschmidt/httprouter ———————————————— 版权声明:本文为CSDN博主「luo1324574369」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/luo1324574369/article/details/108310032 |