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 關注
- 183 瀏覽
添加回答
舉報