保留结构数据以便以后使用它

时间:2015-05-31 20:57:02

标签: regex go

我正在学习golang - 编写小型网络博客,编写路由器(我知道有几个 - 大猩猩多普勒,马丁尼等)。

我有简单的结构

type Routes struct {    
    method string
    pattern string
    handler Handler
}

和一些正则表达式匹配器。但我无法理解如何保留我将在一个地方定义的所有路线。使用切片结构好主意(如 []Routes)让他们在一起?

P.S。这是为了个人理解它们如何一起工作

1 个答案:

答案 0 :(得分:1)

你的问题确实没有明确定义。您告诉我们您希望基于正则表达式实现路由功能,但您没有告诉我们您希望实现哪种类型的任务,这会极大地影响要使用的最佳或最佳数据结构。

您已经提到过您了解很多其他开源实现,也许您应该查看它们的来源。

This answer也可能对您有所帮助,它显示了如何使用正则表达式执行路由功能的基本实现的简单实现。

如果您只是希望能够注册与请求路径匹配的正则表达式,然后将服务转发给Handler,是的,将“规则”存储在[]Routes中是一个可行而简单的选择。

要记住的事情:

  • 我肯定会提前编译正则表达式并存储结果,而不是每次都编译它们,这是对资源的极大浪费。因此,您的Routes结构应包含*regexp.Regexp类型的字段,而不是模式(您可以保留string模式,例如用于调试目的)。

  • 如果你的Routes结构变大,我会考虑在切片中存储指针而不是结构值,例如: []*Routes因为每次循环时(例如,在每个请求中查看哪些匹配项)或每当您从Routes之一创建局部变量时,都会根据值进行复制。与复制快速指针相比,复制大型结构效率低。