gpt4 book ai didi

web-services - 获取 Golang HTTP 或 Gorilla 包中的路由和参数列表

转载 作者:IT王子 更新时间:2023-10-29 01:17:26 27 4
gpt4 key购买 nike

当我编写这样一个简单的 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)
}

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

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

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

最佳答案

您可以使用 http.DefaultServeMux(输入 ServeMux )并检查它。使用 reflect 包,您可以 ValueOf 默认多路复用器并提取 m 属性,这是您的路由映射。

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

更新:

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

访问参数

如果你使用 gorilla/mux 而不是 elithrar 提到的你应该使用 Walk:

主要功能:

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

err := r.Walk(gorillaWalkFn)
if err != nil {
log.Fatal(err)
}

func gorillaWalkFn:

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

path 变量包含您的模板:

“/路径/{param1}”

但您应该手动提取参数。

关于web-services - 获取 Golang HTTP 或 Gorilla 包中的路由和参数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com