Gin 框架的路由选用的是一种压缩后的基数树(radix tree),它和我们之前实现的 trie 树相比最大的区别在于,它并不是把按照分隔符切割的 segment 作为一个节点,而是把整个 URL 当作字符串,尽可能匹配相同的字符串作为公共前缀。
为什么 Gin 选了这个模型?其实 radix tree 和 trie 树相比,最大的区别就在于它节点的压缩比例最大化。直观比较上面两个图就能看得出来,对于 URL 比较长的路由规则,trie 树的节点数就比 radix tree 的节点数更多,整个数的层级也更深。
针对路由这种功能模块,创建路由树的频率远低于查找路由点频率,那么减少节点层级,无异于能提高查找路由的效率,整体路由模块的性能也能得到提高,所以 Gin 用 radix tree 是更好的选择。