gpt4 book ai didi

go - 获取与 http.HandleFunc 匹配的当前模式

转载 作者:数据小太阳 更新时间:2023-10-29 03:16:59 28 4
gpt4 key购买 nike

有没有办法获取触发 http.HandleFunc 的当前路由?也许是这样的?

http.HandleFunc("/foo/", serveFoo)
func serveFoo(rw http.ResponseWriter, req *http.Request) {
fmt.Println(http.CurrentRoute())
// Should print "/foo/"
}

我想获取当前路由的原因是因为我发现自己经常写这样的代码。

if req.URL.Path != "/some-route/" {
http.NotFound(resp, req)
return
}
// or
key := req.URL.Path[len("/some-other-route/"):]

如果代码像这样更易于复制粘贴、模块化和 DRY,那就太好了。

if req.URL.Path != http.CurrentRoute() {
http.NotFound(resp, req)
return
}
// or
key := req.URL.Path[http.CurrentRoute():]

这真的只是一件小事,所以我不想将整个其他依赖项引入我的项目 (Gorilla Mux)。

最佳答案

获取匹配的当前路由是不可能的,但是可以消除你场景中的重复代码。编写一个处理程序,在调用另一个处理程序之前检查路径:

func HandleFuncExact(mux *http.ServeMux, pattern string, handler func(http.ResponseWriter, *http.Request) {
mux.HandleFunc(pattern, func(w http.ResponseWriter, r *http.Request) {
if req.URL.Path != pattern {
http.NotFound(w, r)
return
}
handler(w, r)
})
}

在您的应用程序中,调用包装器而不是 HandlFunc:

HandleFuncExact(http.DefaultServeMux, "/some-route/", serveSomeRoute)

serveSomeRoute 函数可以假定路径恰好是“/some-route/”。

关于go - 获取与 http.HandleFunc 匹配的当前模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29268860/

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