英文:
How to get available routes from the mux in go?
问题
我有一个 mux 和 4 条不同的路由。
a.Router = mux.NewRouter()
a.Router.HandleFunc("/1/query/{query}", a.sigQuery).Methods("GET")
a.Router.HandleFunc("/1/sis", a.rGet).Methods("GET")
a.Router.HandleFunc("/1/sigs", a.sigHandler).Methods("GET", "POST", "DELETE")
a.Router.HandleFunc("/1/nfeeds", a.nfeedGet).Methods("GET", "DELETE", "POST")
有没有一种方法可以列出定义的路由并获取它们上定义的方法?我尝试了这种方式:routes := a.getRoutes()
将返回一个包含所有路由的切片,methods := routes[1].Methods()
将返回该路由上列出的方法。我们有办法实现这个吗?
英文:
I have a mux and 4 different routes.
a.Router = mux.NewRouter()
a.Router.HandleFunc("/1/query/{query}", a.sigQuery).Methods("GET")
a.Router.HandleFunc("/1/sis", a.rGet).Methods("GET")
a.Router.HandleFunc("/1/sigs", a.sigHandler).Methods("GET", "POST", "DELETE")
a.Router.HandleFunc("/1/nfeeds", a.nfeedGet).Methods("GET", "DELETE", "POST")
Is there a method where we can list the defined routes and get the methods defined on them. I was trying this way: routes := a.getRoutes()
will return me a slice with all the routes, and methods := routes[1].Methods()
will return the methods listed on that route. Is there a way we can achieve this?
答案1
得分: 10
使用Walk
方法:
router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
tpl, err1 := route.GetPathTemplate()
met, err2 := route.GetMethods()
fmt.Println(tpl, err1, met, err2)
return nil
})
或者,您可以将所有路由放入一个结构体切片中,然后在初始化步骤中执行以下操作:
for _, r := range routes {
router.HandleFunc(r.tpl, r.func).Methods(r.methods...)
}
英文:
Use the Walk
method:
router.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
tpl, err1 := route.GetPathTemplate()
met, err2 := route.GetMethods()
fmt.Println(tpl, err1, met, err2)
return nil
})
Alternatively, you can just put all your routes into a slice of structs and just do
for _, r := range routes {
router.HandleFunc(r.tpl, r.func).Methods(r.methods...)
}
on the initialisation step.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论