Golang使用通配符路由发送GET请求时出现404错误排查
问题原因及解决办法
你的问题出在标准库http.ServeMux不支持{$}这种结尾匹配语法,该语法是gorilla/mux这类第三方路由库的特性,和标准库的路由匹配规则不兼容。
标准库ServeMux的核心匹配逻辑:
- 注册
"GET /"时,默认会匹配根路径及所有以/开头的子路径(因为ServeMux会自动忽略路径末尾的斜杠,子路径会继承父路由的处理函数,除非有更精确的路由匹配)。 - 若要实现严格匹配根路径(仅响应
GET /,拒绝GET /xxx这类子路径请求),标准库的正确写法是在处理函数内判断请求路径是否严格等于/,修改后的代码如下:
package main import ( "log" "net/http" ) func home(w http.ResponseWriter, r *http.Request) { // 严格校验请求路径,非根路径直接返回404 if r.URL.Path != "/" { http.NotFound(w, r) return } w.Write([]byte("Hello from Snippetbox")) } func main() { mux := http.NewServeMux() // 移除{$},使用标准库支持的路由格式 mux.HandleFunc("GET /", home) log.Print("starting server on :4000") err := http.ListenAndServe(":4000", mux) log.Fatal(err) }
内容的提问来源于stack exchange,提问作者Jagdish samant
相关产品推荐
相关产品推荐

