Golang handlefunc



所以我有这个奇怪的问题,有些路线将工作和其他不会。我将首先向您展示我的主要函数,然后给出问题所在的示例。

func main() {
http.HandleFunc("/", home)
http.HandleFunc("/project", project)
http.HandleFunc("/about", about)
http.HandleFunc("/contact", contact)
http.Handle("/resources/", http.StripPrefix("/resources", http.FileServer(http.Dir("./assets"))))
err := http.ListenAndServe(":80", nil)
if err != nil {
fmt.Println("ListendAndServe doesn't work : ", err)
}
}

例如路由"/contact/"不工作,当我运行这段代码,去localhost/联系它会把我送到主页。但是,当我将Handlefunc中的路由更改为"/contacts "然后转到localhost/contacts它可以工作

另一个例子,"/project"现在工作,但当我把它改为"/projects">

请注意,如果注册/project/(注意尾斜杠),那么/project//project都可以工作(带或不带尾斜杠)。如果您注册/project(没有尾斜杠),那么只有/project将工作,/project/将由根处理程序/匹配。

引自http.ServeMux:

如果一个子树已经注册,并且收到一个命名子树根的请求,而不带尾斜杠,ServeMux将该请求重定向到子树根(添加尾斜杠)。可以使用不带尾斜杠的路径的单独注册来覆盖此行为。例如,注册"/images/"导致ServeMux重定向对"/images&quot的请求;到"/images/"除非"/images"已单独注册。

参见相关问题:

如何使用以"/"结尾的模式映射到相同的函数与http。HandleFunc

最新更新