我刚刚玩了一个谷歌GO官方示例Writing Web Applications我试图添加删除页面的功能,但它没有奏效。原因是如果您将"/delete/"
作为参数传递给http.HandleFunc()
函数,则始终无法找到404 Page。任何其他"foobar"
字符串都按预期工作。
简化代码:
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%s", r.URL.Path)
}
func main() {
http.HandleFunc("/hello/", handler)
//http.HandleFunc("/delete/", handler)
http.ListenAndServe(":8080", nil)
}
重现的步骤:
http://localhost:8080/hello/world
/hello/world
http.HandleFunc("/hello/", handler)
并取消注释http.HandleFunc("/delete/", handler)
http://localhost:8080/delete/world
404 page not found
,预计为/delete/world
问题:
"/delete/"
模式有什么特殊含义吗?是否有任何技术原因或仅仅是一个错误?
答案 0 :(得分:2)
这在这里工作得很好,它不可能在一种情况下工作而不能在另一种情况下工作。您只是在两行之间更改字符串"hello"
的字符串"delete"
。
我建议再仔细一点。它必须是其他地方的细节。
真正的原因是没有检查ListenAndServe
的错误结果。旧副本在后台运行,缺少错误处理使其无法接受。浏览器从旧服务器获得结果。