社区
其他技术讨论专区
帖子详情
解惑:关于 gin 的路由实现,前缀树?map?
weixin_38052602
2019-09-20 10:10:33
**复杂度**
* 前缀树 O(n)
* map O(1)
从复杂度上看 前缀树 是大于 map 的
那么gin使用前缀树只是为了降低内存占用吗?
...全文
197
6
打赏
收藏
解惑:关于 gin 的路由实现,前缀树?map?
**复杂度** * 前缀树 O(n) * map O(1) 从复杂度上看 前缀树 是大于 map 的 那么gin使用前缀树只是为了降低内存占用吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_38080713
2019-09-20
打赏
举报
回复
?
weixin_38092066
2019-09-20
打赏
举报
回复
一方面是节省内存,更重要是方便查找,像`/user/:id`这种参数会变的路由用`map`就不太好实现了
weixin_38104763
2019-09-20
打赏
举报
回复
像下面这种场景,map也不太好实现 为了更具扩展性,每一层的节点按照priority排序,priority是节点的子节点(儿子节点,孙子节点等)注册的handler的数量,这样做有两个好处: - 被最多路径包含的节点会被最先评估。这样可以让尽量多的路由快速被定位。 - 有点像成本补偿。最长的路径可以被最先评估,补偿体现在最长的路径需要花费更长的时间来定位,如果最长路径的节点能被优先评估(即每次拿子节点都命中),那么所花时间不一定比短路径的路由长。下面展示了节点(每个-可以看做一个节点)评估的路径:从左到右,从上到下 可以看下这篇文章,讲得挺好的 [路由查找之Radix Tree](https://michaelyou.github.io/2018/02/10/%E8%B7%AF%E7%94%B1%E6%9F%A5%E6%89%BE%E4%B9%8BRadix-Tree/)
weixin_38115771
2019-09-20
打赏
举报
回复
感谢
weixin_38061494
2019-09-20
打赏
举报
回复
没有人讨论吗
weixin_38072180
2019-09-20
打赏
举报
回复
没人?
前缀树
——以
Gin
路由
为例
其主要性质是在
gin
中也存在着非常巧妙运用
前缀树
进行
路由
匹配的结构,本文将以
gin
路由
为例学习一下
前缀树
本文代码皆是参考
gin
@v1.7.4版本源码所构建的更适合理解改造版,并且省略了诸如标记是否是通配符的node ...
关于
GIN
的
路由
树
GIN
是一个 golang 常用的 Web 框架,而“树”则是 一种优化的数据结构。 因为在
GIN
这个 Web 框架中的
路由
树是
前缀树
,所以我们今天会围绕
前缀树
来讲解。
gin
的
路由
详解
gin
最简单的实践: func main() { // 1.创建
路由
r :=
gin
.Default() // 2.绑定
路由
规则,执行的函数 //
gin
.Context,封装了request和response r.GET("/", func(c *
gin
.Context) { c.String(http.StatusOK, ...
GIN
:图神经网络有多强大? HOW POWERFUL ARE GRAPH NEURALNET WORKS
来源:ICLR 2019 代码: GitHub - weihua916/powerful-gnns:...内容:从理论上证明了邻域聚合(或称消息传递)的GNN变体的表达能力的严格上限(WL同构检验),同时设计了一个此框架下,最强大的GNN,即
GIN
1 邻...
gin
框架httprouter
路由
原理
gin
的
路由
注册采用的是httprouter。httprouter是基于radix tree
实现
的...其
路由
的原理是大量使用公共前缀的树结构,具有公共前缀的节点也共享一个公共父节点。每一种http方法一个 radix tree,这样可以提高匹配效率;
其他技术讨论专区
433
社区成员
791,271
社区内容
发帖
与我相关
我的任务
其他技术讨论专区
其他技术讨论专区
复制链接
扫一扫
分享
社区描述
其他技术讨论专区
其他
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章