我正在学习 golang - 编写小型网络博客,并编写路由器(我知道有一些可用的 - gorilla mux、martini 等)。我有简单的结构type Routes struct { method string pattern string handler Handler}和一些正则表达式匹配器。但我不明白如何将所有我将定义的路线保留在一个地方。使用结构切片是个好主意(如 []Routes)将它们保持在一起吗?PS这是为了个人理解它是如何协同工作的
1 回答
慕少森
TA贡献2019条经验 获得超9个赞
你的问题没有很好的定义。你告诉我们你想基于正则表达式实现路由功能,但你没有告诉我们你想要实现什么样的任务,这会极大地影响要使用的最佳或最佳数据结构。
您已经提到您了解许多其他开源实现,也许您应该检查它们的来源。
这个答案也可能对您有所帮助,它显示了如何使用正则表达式执行路由功能的基本实现的简单实现。
如果您只是希望能够注册与请求路径匹配的正则表达式,然后将服务转发到 a Handler
,是的,将“规则”存储在 a 中[]Routes
是一个可行且简单的选项。
要记住的事情:
我肯定会提前编译正则表达式并存储结果,而不是每次都编译它们,这非常浪费资源。所以你的
Routes
结构应该包含一个类型的字段*regexp.Regexp
而不是模式(你也可以保留string
模式,例如用于调试目的)。如果您的
Routes
结构变大,我会考虑在切片中存储指针而不是结构值,例如[]*Routes
因为每次循环遍历它们时(例如在每个请求中查看哪些匹配项)或每当您从其中一个创建局部变量时Routes
,根据值制作副本。与复制速度快的指针相比,复制大型结构体效率低下。
- 1 回答
- 0 关注
- 168 浏览
添加回答
举报
0/150
提交
取消