登录
首页 >  Golang >  Go问答

默认服务器 mux 如何匹配 url 模式

来源:stackoverflow

时间:2024-04-27 09:06:33 432浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《默认服务器 mux 如何匹配 url 模式》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

我见过简单的路由器实现,使用以下代码从请求路径中提取 url 参数。

handler := http.newservermux()
handler.handlefunc('/user/', func(w http.responsewriter, r *http.request) {
     name := strings.replace(r.url.path, '/user/', "", 1)// this code

    io.writestring(w, fmt.sprintf("hello %s\n",name)
})

然后它们将是另一条路线,例如 /user (注意缺少尾部斜杠)。

handler.HandleFunc('/user', handleUser)

例如,r.url.path/user/name。第一条路线将匹配,而第二条较短路径将不匹配。从技术上讲,请求路径不应与任何路由匹配,因为一条路径太长而无法匹配,而另一条路径太短。

这就提出了一个问题:golang mux 在将请求与路由匹配时遵循什么规则。乍一看似乎是采用最长的路径匹配,但如果最短路径首先在程序源代码中定义怎么办?

有人可以简单解释一下 servermux 的行为吗?


解决方案


最好的解释是官方的,可以在 documentation for the http package 中找到。部分内容:

模式命名固定的根路径,如“/favicon.ico”,或根子树,如“/images/”(注意尾部斜杠)。较长的模式优先于较短的模式,因此,如果同时为“/images/”和“/images/thumbnails/”注册了处理程序,则将为“/images/thumbnails/”开头的路径调用后一个处理程序,而前者则将被调用将接收对“/images/”子树中任何其他路径的请求。

请注意,由于以斜杠结尾的模式命名为根子树,因此模式“/”匹配与其他已注册模式不匹配的所有路径,而不仅仅是 Path ==“/”的 URL。

一如既往,如果您需要更多详细信息,请阅读文档。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>