【问题标题】:path param in URL in GO without any web frameworkGO中URL中的路径参数,没有任何Web框架
【发布时间】:2017-07-05 21:28:49
【问题描述】:

在 Go 中开发 REST api 时,我们如何使用路径参数?意思是说URI的格式是什么?

http://localhost:8765/myapp/{param1}/entries/{param2}

我尝试使用类似的东西来创建路由,但处理函数没有被调用。

请注意,我打算只使用 net/http 包,而不是像 gorilla mux 这样的任何其他 Web 框架。

【问题讨论】:

标签: go


【解决方案1】:

我倾向于做的是嵌套处理程序。 “/”由根处理程序处理。它弹出路径的第一部分,将其余部分分配回req.URL.Path(实际上就像StripPrefix),确定哪个处理程序通过该前缀(如果有)处理路由,然后链接适当的处理程序。如果该处理程序需要从路径中解析出一个 ID,它可以通过相同的机制 - 弹出路径的第一部分,根据需要对其进行解析,然后采取行动。

这不仅没有外部依赖,而且比任何路由器都快,因为路由是硬编码的,而不是动态的。除非路由在运行时发生变化(这很不寻常),否则不需要动态处理路由。

【讨论】:

    【解决方案2】:

    这就是人们使用像gin-gonic 这样的框架的原因,因为在net/http 包IIUC 中做到这一点并不容易。

    否则,您需要strings.Split(r.URL.Path, "/") 并使用这些元素。

    【讨论】:

    • 是的,我和大猩猩 Mux 搞砸了。但是在标准库中,net/http 包不能让我有这样的灵活性。我不得不按照您上面的建议处理字符串修剪和 url 路径的拆分。只是想确认是否确实有任何其他方法可以使用 std lib 中的任何内容完成此操作。我是GO新手,请原谅我的无知。我无法得到的另一件事是拥有基于方法的处理程序。需要从看起来的请求对象访问方法。
    • 别担心。所有的 golang Web 开发者都有同样的想法。 ;)
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2013-08-15
    • 2020-04-25
    • 1970-01-01
    相关资源
    最近更新 更多