我有一个像events/{id}
这样的端点和一个处理程序。如何在不使用大猩猩/Mux的情况下获得{id}
。有哪些 GoLang 内置替代方案可以实现这一点?需要在没有大猩猩/Mux 或其他第三方库的情况下执行此操作。我知道这可以用多路复用器来完成。变量,但不能在这里使用它。
如果您已经设法将流量定向到您的处理程序,那么您只需自己解析 URL 路径:
func HandlerFunc(w http.ResponseWriter, request *http.Request) {
segments := strings.Split(request.URL.Path, "/")
// If path is /events/id, then segments[2] will have the id
}
Request.URL.Path已经进行了 URL 解码,因此如果您的参数可能包含斜杠,请使用 Request.RequestURI 和 url。PathUnescape 相反:
segments := strings.Split(r.RequestURI, "/")
for i := range segments {
var err error
segments[i], err = url.PathUnescape(segments[i])
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
}
您可以在/events/
之后开始获取字符串的切片:
func eventHandler(w http.ResponseWriter, r *http.Request) {
id := r.URL.Path[len("/events/"):]
w.Write([]byte("The ID is " + id))
}
func main() {
http.HandleFunc("/events/", eventHandler)
}