Go net/http呈现根路由,即使我转到的路由不';不存在

Go net/http呈现根路由,即使我转到的路由不';不存在,go,Go,我有以下路线: http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { renderAndExecuteTemplate(w, r, "page/index.tmpl", nil) }) http.HandleFunc("/route1", func(w http.ResponseWriter, r *http.Request) { renderAndExecuteTemplate(w,

我有以下路线:

  http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    renderAndExecuteTemplate(w, r, "page/index.tmpl", nil)
  })

  http.HandleFunc("/route1", func(w http.ResponseWriter, r *http.Request) {
    renderAndExecuteTemplate(w, r, "page/route1.tmpl", nil)
  })


  http.HandleFunc("/route2", func(w http.ResponseWriter, r *http.Request) {
    renderAndExecuteTemplate(w, r, "page/route2.tmpl", nil)
  })
它起作用了

但是,当我转到一个不存在的路由:“localhost/fdsafds”时,它仍然呈现“index”页面

为什么??如何防止这种情况发生?

来自:

请注意,由于以斜杠结尾的模式命名有根子树, 模式“/”匹配所有未被其他注册路径匹配的路径 模式,而不仅仅是路径为=“/”的URL

防止这种情况的一种方法是构建一个查看请求的处理程序:

http.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
  if r.URL.Path != "/" {
    w.WriteHeader(http.StatusNotFound)
    return
  }

  renderAndExecuteTemplate(w, r, "page/index.tmpl", nil)
})
从:

请注意,由于以斜杠结尾的模式命名有根子树, 模式“/”匹配所有未被其他注册路径匹配的路径 模式,而不仅仅是路径为=“/”的URL

防止这种情况的一种方法是构建一个查看请求的处理程序:

http.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
  if r.URL.Path != "/" {
    w.WriteHeader(http.StatusNotFound)
    return
  }

  renderAndExecuteTemplate(w, r, "page/index.tmpl", nil)
})