- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
使用下面的代码,当我访问/test2 时它响应 404 - 未找到。/test1 工作正常。这是为什么?尽管路由器实现了http.Handler 接口(interface),但不允许嵌套吗?
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()
mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test1") })
subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test2") })
mainRouter.Handle("/", subRouter)
http.ListenAndServe(":9999", mainRouter)
}
编辑:
我的主要目标是添加一些初始工作,这对 subRouter 中的所有路由都是通用的,并且只对它们有用。更具体地说,我想使用 Negroni作为我的中间件编排器。Negroni 网站上有一个将中间件添加到路由组的示例:
router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here
Create a new negroni for the admin middleware
router.Handle("/admin", negroni.New(
Middleware1,
Middleware2,
negroni.Wrap(adminRoutes),
))
Negroni 基本上执行每个参数的 ServeHTTP 方法,因为它们都实现了 http.Handler。它按顺序执行它们,因此路由器路由将在最后。
我熟悉 Mux 中 Subrouter
的概念,但是据我所知,我不能像上面的例子那样使用它,特别是,我不能在 mainRouter 和它的之间注入(inject)任何东西子路由器
。这就是嵌套看起来更灵活的原因。
最佳答案
我知道这个问题有点老了,但我花了一些时间弄清楚处理程序和匹配在 go 中是如何工作的。可以看我的实验代码here .
基本上,你可以用这样的代码得到你想要的效果:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()
mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "test1")
})
subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "test2")
})
// in mux, you need to register subrouter
// with the same path that the handlers in
// it are matching
mainRouter.Handle("/test2", subRouter)
// if your subrouter has handlers that match
// other sub paths - you also need to do this
mainRouter.Handle("/test2/{_dummy:.*}", subRouter)
http.ListenAndServe(":9999", mainRouter)
}
我希望这对某人有帮助。
关于go - 嵌套的 Gorilla Mux 路由器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25107763/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
您好,我正在其他 Go 文件中初始化路由器,并在主文件中返回它的引用,然后在主文件中我正在初始化服务。这段代码没有编译 package router import ( "github.com/
我是 Golang 的新手,我正在阅读某人使用 gorilla/mux 编写的 API 代码,我遇到了这段代码。 func heroGet(w http.ResponseWriter, r *http
在 Go 中,我尝试了简单的数据库连接。我需要导入 gorilla/mux ,但我做不到。 我正在使用 VS 代码。之后 cd转到我的项目目录,我创建了 main.go确实跑了go get -u gi
在围棋中,我尝试了简单的数据库连接。我需要进口大猩猩/MUX,但我不能。。我正在使用VS代码。在cd进入我的项目目录之后,我创建了main.go并运行了go get-u githorb.com/Gor
我正在学习 Go 并遇到了 gorilla/mux 路由器。我想在文本文件中有动态路由,例如: /user/1/post/1 为此,我编写了以下代码: func (s *Server) RegRout
我想做以下 pin muxing。即出于某种目的,USART Tx -> 到 GPIO -> 返回到 Linux 内核中的 USART Tx 引脚。 我尝试使用 gpio_request 和 gpio
我想创建一个/user 子路由器,如下所示 user := app.Router.PathPrefix("/user").Subrouter() user.HandleFunc("/create",
我有以下代码: r := mux.NewRouter() r.HandleFunc("/", homeHandler) r.HandleFunc("/login", loginHandler) adm
请看下面我的代码。如您所见,这是一个具有两个端点的简单服务: /test <-- 使用中间件保护的基本身份验证 /static <-- 提供 ./static 目录中的所有文件 现在我也在尝试将基本身
我有以下路线: router.Methods("POST").Path("/my_post_01").HandlerFunc(myHandler1) router.Methods("GET").Pat
我试图使用 gorilla-mux 库设置一个 CRUD http API。 我遵循了 youtube 教程实现如下:- package main import ( "github.com/g
因此,我正在使用 Go 和 Gorilla Mux 开发一个简单的 RESTful API。我的第二条路线不工作时遇到问题,它返回 404 错误。我不确定问题出在哪里,因为我是 Go 和 Gorill
我无法让 gorilla mux 工作.. 当请求 http://www.localhost:9000 时,Web 服务器返回 404 page not found 但这有效 http://local
我有一台使用 gorilla 多路复用器的服务器。现在我有两个这样的处理程序: api.HandleFunc("/foo", logHandler(mypackage.fooHandler)).Met
我正在尝试构建一个非常简单的 Go web 应用程序,而 golang “每个包一个文件夹” 结构让我遇到了困难。 我使用 github.com/gorilla/mux 作为路由器,使用 github
当我使用 http 中的默认路由器时,一切正常,但如果我改用 gorilla/mux 中的路由器,我会得到一个 404 页面,主体为 404 页面未找到。如下面的示例所示,其他一切都完全相同。 为什么
我正在使用 mux包似乎工作得很好,只是它似乎不支持复杂的路由,或者至少我不明白它是如何工作的。我有以下几条路线: router := mux.NewRouter() router.HandleFun
我一直在做一个使用 gorilla/mux 作为路由器的 Go 项目。 我需要能够将查询值与路由关联,但这些值应该是可选的。这意味着我想在同一个处理程序中同时捕获 /articles/123 和 /a
我正在使用 gorilla mux 来管理路由。我缺少的是在每个请求之间集成一个中间件。 例如 package main import ( "fmt" "github.com/gori
我是一名优秀的程序员,十分优秀!