Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 保留结构数据以便以后使用_Regex_Go - Fatal编程技术网

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

Regex 保留结构数据以便以后使用,regex,go,Regex,Go,我正在学习golang——编写小型网络博客,并编写路由器(我知道有几种——gorilla mux、martini等) 我有一个简单的结构 type Routes struct { method string pattern string handler Handler } 还有一些正则表达式匹配器。但我不明白如何将我将定义的所有路线保留在一个地方。使用结构切片是个好主意吗(比如 []路由)将它们保持在一起 顺便说一句,这是为了个人理解这一切是如何协同工作的你的问

我正在学习golang——编写小型网络博客,并编写路由器(我知道有几种——gorilla mux、martini等)

我有一个简单的结构

type Routes struct {    
    method string
    pattern string
    handler Handler
}
还有一些正则表达式匹配器。但我不明白如何将我将定义的所有路线保留在一个地方。使用结构切片是个好主意吗(比如
[]路由
)将它们保持在一起


顺便说一句,这是为了个人理解这一切是如何协同工作的

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

您已经提到,您知道许多其他开源实现,也许您应该检查它们的源代码

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

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

要记住的事情:

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

  • <> L> > P > >如果你的代码>路由 SCORT变大,我会考虑在切片中存储指针而不是结构值,例如<代码> []:Reals。因为每次当你循环它们时(例如在每个请求中查看哪些匹配),或者每当你从一个<代码>路由< /代码>中创建一个本地变量时,就会从这些值中复制一个副本。与快速复制指针相比,复制大型结构效率较低


谢谢你的建议,但是你能解释一下关于编译regexp的更多信息吗?编译regexp是什么意思?@Avdept如果你在Go中有一个regexp作为
字符串
,如果你想检查这个regexp是否与另一个
字符串
匹配,你可以使用这个方法
Regexp
string
正则表达式的编译(分析)版本。您可以编译一个regexp
字符串
,并获取一个
regexp
值,例如使用or函数。