如何处理Go中不同方法的http请求?

我试图找出最好的方式来处理/只有// Go的请求,并以不同的方式处理不同的方法。 这是我所想到的最好的:

 package main import ( "fmt" "html" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } if r.Method == "GET" { fmt.Fprintf(w, "GET, %q", html.EscapeString(r.URL.Path)) } else if r.Method == "POST" { fmt.Fprintf(w, "POST, %q", html.EscapeString(r.URL.Path)) } else { http.Error(w, "Invalid request method.", 405) } }) log.Fatal(http.ListenAndServe(":8080", nil)) } 

这是惯用的去? 这是最好的我可以用标准的http lib做什么? 我宁愿做一些像http.HandleGet("/", handler)如快递或Sinatra。 有编写简单的REST服务的好框架吗? web.go看起来很有吸引力,但似乎停滞不前。

感谢您的build议。

为了确保你只为根服务:你做正确的事情。 在某些情况下,您可能需要调用http.FileServer对象的ServeHttp方法,而不是调用NotFound; 这取决于你是否有你想要服务的杂项文件。

以不同的方式处理不同的方法:我的许多HTTP处理程序只包含switch语句,如下所示:

 switch r.Method { case "GET": // Serve the resource. case "POST": // Create a new record. case "PUT": // Update an existing record. case "DELETE": // Remove the record. default: // Give an error message. } 

当然,你可能会发现像大猩猩这样的第三方软件包对你更好。

呃,我实际上正在睡觉,因此看看http://www.gorillatoolkit.org/pkg/mux这个非常好的,做你想做的事情的快速评论,只是给文档看一看。; 例如

 func main() { r := mux.NewRouter() r.HandleFunc("/", HomeHandler) r.HandleFunc("/products", ProductsHandler) r.HandleFunc("/articles", ArticlesHandler) http.Handle("/", r) } 

 r.HandleFunc("/products", ProductsHandler). Host("www.domain.com"). Methods("GET"). Schemes("http") 

以及执行上述操作的许多其他可能性和方式。

但我觉得有必要解决问题的另一部分,“这是我能做的最好的事情”。 如果std lib有点太空,那么一个很好的资源可以在这里find: https : //github.com/golang/go/wiki/Projects#web-libraries (特别链接到web库)。