Go 实现 Web 框架 Day3 学习笔记

Go 实现 Web 框架 Day3 学习笔记

极客兔兔大佬的《七天用Go从零实现系列》Day3 前缀树路由学习笔记

Day3 内容

主要实现前缀路由匹配 (约150行代码)

  • :name 格式的路径参数路由匹配
  • *filepath 格式的文件路径路由匹配

##本节知识

  • 前缀树( Trie 树) 结构实现动态的路由匹配
  • 函数的递归调用

开发内容

具体内容: https://geektutu.com/post/gee-day3.html

开发需求:

增加 “:name” 和 “.filepath” 两种类型的动态匹配

操作步骤:

  • 定义 trie 组件,专门用于路由匹配
  • 定义 node 类型,每个 node 和路径中的一个访问层级( /…/ 中间的内容)
  • 2个基本方法,insert 和 search 方法
  • 3个扩展方法
    parsePattern 解析请求路径成层级切片;
    matchChild 获取第一个匹配成功的节点,用于插入;
    matchChildren 所有匹配成功的节点,用于查找
  • 修改 router.go 方法,调整 addRouter 的逻辑
  • 新建测试用例,测试动态路由匹配
  • 修改调用逻辑,加入2种动态匹配的 用例

思考题

  • go 中字符串如何比较?
  • 切片与数组的区别?
  • 切片扩容过程?

最后答案单独列一篇,可以自己试着解答一下。

小结

Day3 主要增加了前缀树( Trie 树)路由,不再使用静态全文匹配路由。

数据结构从 map[string]HandlerFunc 过渡到 map[string]*node,算法从 hash 计算变成了 Trie 树。

Day2 中将整个框架分为 Context 组件和 Router 组件,定制路由匹配时,将修改的范围限定在了 Router 组件中,变化没有扩散。

我们还新增了 insert 和 search 两个方法,之前设计实现的时候没有考虑后续变化,要注意面向接口编程而不是面向具体实现编程,当然还要警惕过度设计的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值