1 回答
TA贡献1803条经验 获得超6个赞
为了说明为什么这不起作用,请考虑以下测试应用程序:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
type testHandler struct{}
func (h *testHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Printf("Got request for %s\n", r.URL)
}
func main() {
r := mux.NewRouter()
hndlr := testHandler{}
r.Handle("/", &hndlr)
// run on port 8080
if err := http.ListenAndServe(":8080", r); err != nil {
panic(err)
}
}
如果您http://127.0.0.1:8080/在浏览器中运行并访问它,它将记录Got request for /. 但是,如果您访问 http://127.0.0.1:8080/foo,您将收到 404 错误,并且不会记录任何内容。这是因为r.Handle("/", &hndlr)只会匹配它,/而不是它下面的任何东西。
如果将其更改为r.PathPrefix("/").Handler(&hndlr),它将按预期工作(路由器会将所有路径传递给处理程序)。因此,要将您的示例更改r.Handle("/", http.FileServer(http.Dir("web")))为r.PathPrefix("/").Handler( http.FileServer(http.Dir("web"))).
注意:因为这是传递所有路径,FileServer所以实际上不需要使用 Gorilla Mux;假设您将使用它来添加其他一些路线,我将其保留。
- 1 回答
- 0 关注
- 149 浏览
添加回答
举报