登录
首页 >  Golang >  Go问答

停止 go/mux 中第一次匹配

来源:stackoverflow

时间:2024-03-11 20:06:23 400浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《停止 go/mux 中第一次匹配》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我有以下路由器:

func testHttp() {

    r := mux.NewRouter()
    s := r.PathPrefix("/cmd").Subrouter()
    s.HandleFunc("/{cmd}", cmd)
    http.Handle("/", r)

    http.ListenAndServe(":8090", nil)
}

当我发出诸如 localhost:8090/cmd/ls -la 之类的请求时,cmd 处理程序会正确执行。但是,如果我传递类似 localhost:8090/cmd/ls -la /home/foo 的内容,我会得到 404。这意味着 gorilla/mux 在检测到 / 时保持匹配。那么如何配置它,以便特定匹配路径(在本例中为 /cmd/)之后的所有内容都被视为该路径的参数?想必我只能求助于使用 get 参数,但是如果也使用 /rest-endpoint/params-having/ 也可以实现这一点吗?


解决方案


/ 是 URL 的目录分隔符,因此 mux 所做的事情是正确的,它分隔和匹配由 / 分隔的段。如果要将 ls -la /home/foo 作为路径参数传递,则应转义 / 字符,并写入 %2F。然后 mux 将正确运行。

另一个选项可以是将处理程序安装到 PathPrefix /cmd/。然后,您必须在处理程序中解析路径的剩余部分,但您可以按照您想要的方式处理“/”。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《停止 go/mux 中第一次匹配》文章吧,也可关注golang学习网公众号了解相关技术文章。

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