当我使用
时http.HandleFunc("/", serveRest) //serveRest is the method to handle request
http.ListenAndServe("localhost:4000", nil)
它将接受以"/"
开头的所有请求。如何将其限制为仅"localhost:4000"
而不是"localhost:4000/*"
等每个地址?
你们可以给我一个很好的Go教程吗?
答案 0 :(得分:6)
您注册处理程序的URL模式记录在http.ServeMux
类型:
模式名称是固定的,有根的路径,例如" /favicon.ico"或根管子树,例如" / images /" (注意斜杠)。较长的模式优先于较短的模式,因此如果有两个处理程序注册了" / images /"和" / images / thumbnails /",后面的处理程序将被调用路径开始" / images / thumbnails /"前者将接收" / images /"中任何其他路径的请求;子树。
请注意,由于以斜杠结尾的模式命名为有根的子树,因此模式" /"匹配所有与其他注册模式不匹配的路径,而不仅仅是带有Path ==" /"的网址。
所以不幸的是,没有模式只匹配根("/"
)。
但是你可以在你的处理程序中轻松检查这个,如果请求路径不是root,你可以做任何你想做的事情:
func serveRest(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
w.Write([]byte("Not root!"))
return
}
w.Write([]byte("Hi, this is the root!"))
}
如果您想为非root返回HTTP 404 Not found
错误:
func serveRest(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
w.Write([]byte("Hi!"))
}
另请查看SO上的 Go 标记信息,它有 Go Tutorials 部分。
答案 1 :(得分:1)
你可以退房 https://github.com/julienschmidt/httprouter
根据其自述文件:
仅显式匹配:使用其他路由器,如http.ServeMux,a 请求的URL路径可以匹配多个模式。因此他们有 一些尴尬的模式优先级规则,如最长匹配或第一 注册,首先匹配。通过设计此路由器,请求即可 只匹配一条或几条路线。结果,也没有 意想不到的匹配,这使它非常适合SEO并改善用户 经验。
Here是一些很好的视频内容,可以开始使用Go。