有没有办法获得触发了的当前路线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}// orkey := req.URL.Path[len("/some-other-route/"):]如果代码像这样更具有复制粘贴性、模块化和 DRY,那就太好了。if req.URL.Path != http.CurrentRoute() { http.NotFound(resp, req) return}// orkey := req.URL.Path[http.CurrentRoute():]这真的只是一件小事,所以我宁愿不将整个其他依赖项带入我的项目(Gorilla Mux)。
1 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
无法获得匹配的当前路由,但可以消除场景中的重复代码。编写一个处理程序,在调用另一个处理程序之前检查路径:
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/”。
- 1 回答
- 0 关注
- 156 浏览
添加回答
举报
0/150
提交
取消