GIN 路由分析

发布时间 2023-09-07 15:13:30作者: lisus2000

GIN 路由分析

第一步:gin.Default

 

 

这个会返回一个Engine,Engine的结构如下

 其中RouterGroup也是与路由有关的结构体,它的结构体如下

第二步:r.GET()

r.get就是路由注册和路由处理。

r.GET里面的方法就是group.handle就是咱由处理,handle的处理函数

 

 里面的addRoute这个函数把方法,URI,处理handler 加入进来, 这个函数主要代码如下

 

 

Radix Tree基数树

Radix Tree,基数特里树或压缩前缀树,是一种更节省空间的 Trie 树。它对 trie 树进行了压缩

Trie树简介

Trie,被称为前缀树或字典树,是一种有序树,其中的键通常是单词和字符串,所以又有人叫它单词查找树。

它是一颗多叉树,即每个节点分支数量可能为多个,根节点不包含字符串。

从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。

除根节点外,每一个节点只包含一个字符。

每个节点的所有子节点包含的字符都不相同。

优点:利用字符串公共前缀来减少查询时间,减少无谓的字符串比较

看看是咋压缩的,假如有下面一组数据 key-val 集合:

用上面的数据构造成一个trie树

 把上图结点数小于2的进行压缩,如下

 

现在压缩 trie 树(Compressed Trie Tree)中的唯一子节点,就可以构建一颗 radix tree 基数树。 

在另外看一张出现次数比较多的 Radix Tree 的图:

 (图Radix_tree 来自:https://en.wikipedia.org/wiki/Radix_tree)