深入解析gin框架路由设计

发布时间:2021-07-31 01:08:28

一、概述

很多人都熟悉gin框架,但是很多人并没有更深层次的挖掘gin的路由设计。web框架的核心是什么?一个就是路由,所以想更深的了解这个框架,首先就要去深入了解gin框架的路由。

二、源码
2.1 Engine结构体

type Engine struct {
RouterGroup //定义了 GET,POST 等路由注册方法
...
trees methodTrees //路由逻辑
...
}

2.2 trees

type methodTrees []methodTree

type methodTree struct {
method string
root *node
}
type node struct {
path string //当前节点的相对路径(与父节点的path拼接得到完成路径)
indices string //所有孩子节点组成的字符串
wildChild bool //孩子节点是否存在通配符
nType nodeType //节点类型
priority uint32 //当前节点以及孙子节点的路由数量
children []*node //孙子节点
handlers HandlersChain //当前节点的处理函数(包括中间件)
fullPath string //原始path
}

通过上面的代码结构,我们发现了什么?我们看到了树结构。实际gin框架的路由设计是前缀树,如果不懂前缀树的,可以去看下前缀树的书籍。


三、node里的数据说明
3.1 path和indices

使用的是前缀树的逻辑,搜索引擎使用树的结构比较多


举例个例子说明:
如果我们存在2个路由。分别为/demo,/deny,你觉得根节点和子节点如何划分?
首先我们需要找到2个路由的共同点:de,indices就是子节点的字符串组合


根节点

path:de
indices:mn

子节点

path:mo
indices:

path:ny
indices:

3.2 handlers

handlers主要存储的主要是这个节点所有需要实现的中间件相关的方法。具体处理逻辑可以自己看下源码,这边就不做介绍了。


3.3 nType

gin的节点类型:


const (
static nodeType = iota // 普通节点,默认
root // 根节点
param // 参数路由,比如 /demo/:test
catchAll // 匹配所有内容的路由,比如 /demo/*test
)

3.4 wildChild

如果孩子节点是通配符(*或者:),则该字段为 true。

相关文档

  • 苹果6国行信号跳水有得修吗
  • tpac100控制器设置教程_TP-link AC100控制器配置的详细方法
  • 轻英语教师工作总结精选多篇
  • 堕胎的弊端TheDisadvantagesofAborticide
  • 海尔热水器漏水能修吗
  • react-antd Modal对话框自定义标题和图标
  • 对地理老师评议精选范文
  • 洋气的英文网名 洋气又好听的英文名大全
  • 让宝宝学会独立吃饭的好方法
  • 关于单位职工捐款建议书范文
  • 木棉树的期待
  • 2017监理工程师《合同管理》知识点:违约责任
  • 幽默搞笑段子短段子
  • 操作系统的单多用户与单多任务的区别
  • Ubuntu18.04系统下装CUDA9.0
  • 班主任工作计划中职
  • 伍迪艾伦台词经典大全
  • 小黄人图片高清壁纸手机
  • 夏季孕妇养生吃什么蔬菜好
  • 安卓sdk开发!互联网大厂100道Android面试题助你冲关金三银四!已开源
  • 初中数学复习课教案
  • 电脑上的苹果助手打不开怎么办
  • WDS学习笔记
  • 学校欢送会策划书
  • Hadoop是怎么分块的
  • 64位oracle 10G下载地址
  • SpringBoot三种方式实现定时任务
  • 美甲画花技巧
  • 高中毕业生鉴定
  • 惠普台式电脑的型号怎么查啊
  • 猜你喜欢

  • 矿井通风系统安全性最优化探析
  • 积石峡水电站混凝土面板堆石坝监测设计
  • 中国*代史复*(八上)填空题
  • 化工:化工品价格整体稳中有涨 部分产品价差扩大
  • 为心中的那片海
  • 丹东鸭绿江米业农业技术开发有限公司企业信用报告-天眼查
  • 幼儿园教师年度考核个人总结范文
  • 相声小品剧本《校园无贼之话剧风波》讲述如何共创和谐社会和谐校园。
  • Mac OS X ssh设置
  • (精品)三菱PLC控制的四层电梯毕业论文论文[1]3612043
  • 铜山区艺萌快餐店企业信息报告-天眼查
  • 基于MSP430F449的悬挂运动控制系统设计
  • 大班数学:生活中的倒计时-2019最新幼儿园大班教案
  • 高校图书馆的开架借阅探讨
  • 【2019最新】高中历史第三单元从人文精神之源到科学理性时代第15课*代科学技术革命课后作业岳麓版必修3(1)
  • 美国草药产品协会修订提取物标签
  • 【初中】苏教版七年级语文上册3《冰心诗四首》课件
  • 工程资料员的岗位职责
  • 监护权争夺大战谁是赢家?
  • 数学知识点-学年度第二学期北师大版二年级数学期末试题一-总结
  • 浙江省温州市瑞安市五校联考九年级社会思品上学期期末学业检测试题
  • 案例教学在合同法课程中的运用与创新
  • 感动的作文300字
  • 出国留学必备清单_有关出国留学掌握必备的财务技巧
  • 2019-2020年九年级化学下册 第8单元 课题3 金属资源的利用和保护(第1课时)导学案(新版)新人教版
  • 昆山铼安天广贸易有限公司企业信用报告-天眼查
  • 长江大学宣传汇报PPT
  • 方山小流域水保生态环境建设技术路线
  • 推荐的自动标注工具
  • 2018-2024年中国四氟硼酸三叔丁基膦市场运行动态监测及发展前景投资预测报告
  • 齐鲁名校教科研协作体 湖北 、湖南、山东 部分重点中学2019年高考冲刺模拟试卷( 二 ) 文科综合历史试题
  • 深圳汽车维修工四级三级等级技工介绍
  • 《马男波杰特》经典台词50句:太“致郁”了
  • 热血传奇手机版战士装备哪个好 武器属性对比
  • 设备管理工作个人总结范文精选
  • iphone各版本扫盲贴
  • 我的生日日记(通用10篇)
  • 2014年中国光学玻璃制造行业江苏省苏州市TOP10企业排名
  • 美丽西湖之冬小学作文
  • 企业内部控制精细化管理标准-长期股权投资决策制度
  • 【3套】部编版语文六年级上册第一单元单元测试试卷(附答案)
  • 2018_2019学年高中数学第三章变化率与导数3.2.1_3.2.2导数的概念导数的几何意义作业2
  • 电脑版