猿问

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

有没有办法获得触发了的当前路线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)。


当年话下
浏览 157回答 1
1回答

陪伴而非守候

无法获得匹配的当前路由,但可以消除场景中的重复代码。编写一个处理程序,在调用另一个处理程序之前检查路径: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/”。
随时随地看视频慕课网APP

相关分类

Go
我要回答