在Golang HTTP或Gorilla包中获取路由和参数列表

cod*_*ori 2 web-services go gorilla

当我这样编写一个简单的Web应用程序时:

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/about", handler)
    http.ListenAndServe(":8080", nil)
}
Run Code Online (Sandbox Code Playgroud)

如何找到在Web应用程序中定义的路线和参数列表?例如,在此示例中找到“ / about”。

编辑1: 如何获得这一参数和路线?

gorilla.HandleFunc(`/check/{id:[0-9]+}`, func(res http.ResponseWriter, req *http.Request) {
    res.Write([]byte("Regexp works :)"))
})
Run Code Online (Sandbox Code Playgroud)

hsr*_*srv 7

您可以使用http.DefaultServeMux(键入ServeMux)进行检查。使用reflectpackage,您可以ValueOf使用默认的多路复用器和extract m属性,这是您的路线图。

v := reflect.ValueOf(http.DefaultServeMux).Elem()
fmt.Printf("routes: %v\n", v.FieldByName("m"))
Run Code Online (Sandbox Code Playgroud)

更新

如果您使用net/http,那么您应该在自己实际完成任何请求之前实施提取参数;否则,您可以使用r.URL.Query()

如果您使用的gorilla/mux不是elithrar所提到的,则应使用Walk

func main

r := mux.NewRouter()
r.HandleFunc("/path/{param1}", handler)

err := r.Walk(gorillaWalkFn)
if err != nil {
    log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)

func gorillaWalkFn

func gorillaWalkFn(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error {
    path, err := route.GetPathTemplate()
    return nil
}
Run Code Online (Sandbox Code Playgroud)

path变量包含您的模板:

“ / path / {param1}”

但是您应该手动提取参数。