我正在学习golang - 编写小型网络博客,编写路由器(我知道有几个 - 大猩猩多普勒,马丁尼等)。
我有简单的结构
type Routes struct {
method string
pattern string
handler Handler
}
和一些正则表达式匹配器。但我无法理解如何保留我将在一个地方定义的所有路线。使用切片结构好主意(如
[]Routes
)让他们在一起?
P.S。这是为了个人理解它们如何一起工作
答案 0 :(得分:1)
你的问题确实没有明确定义。您告诉我们您希望基于正则表达式实现路由功能,但您没有告诉我们您希望实现哪种类型的任务,这会极大地影响要使用的最佳或最佳数据结构。
您已经提到过您了解很多其他开源实现,也许您应该查看它们的来源。
This answer也可能对您有所帮助,它显示了如何使用正则表达式执行路由功能的基本实现的简单实现。
如果您只是希望能够注册与请求路径匹配的正则表达式,然后将服务转发给Handler
,是的,将“规则”存储在[]Routes
中是一个可行而简单的选择。
要记住的事情:
我肯定会提前编译正则表达式并存储结果,而不是每次都编译它们,这是对资源的极大浪费。因此,您的Routes
结构应包含*regexp.Regexp
类型的字段,而不是模式(您可以保留string
模式,例如用于调试目的)。
如果你的Routes
结构变大,我会考虑在切片中存储指针而不是结构值,例如: []*Routes
因为每次循环时(例如,在每个请求中查看哪些匹配项)或每当您从Routes
之一创建局部变量时,都会根据值进行复制。与复制快速指针相比,复制大型结构效率低。