为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
当年话下 2021-09-27 10:51:36
有没有办法获得触发了的当前路线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/”。


查看完整回答
反对 回复 2021-09-27
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信