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)