为了账号安全,请及时绑定邮箱和手机立即绑定

保留结构数据以备后用

保留结构数据以备后用

Go
MYYA 2021-10-11 10:38:18
我正在学习 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,根据值制作副本。与复制速度快的指针相比,复制大型结构体效率低下。


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信