Próbuję dowiedzieć się, że najlepszym sposobem, aby obsługiwać żądania do /
i tylko /
w Go i obsługi różnych metod w różnych sposobów. Oto najlepsze, co wymyśliłem:Jak mogę obsłużyć żądania http różnych metod do/w 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))
}
Czy to idiomatyczne Go? Czy to najlepsze, co mogę zrobić ze standardową biblioteką http? Wolałbym zrobić coś takiego jak http.HandleGet("/", handler)
, jak w wyrażeniu lub Sinatra. Czy istnieją dobre ramy do pisania prostych usług REST? web.go wygląda atrakcyjnie, ale wydaje się być w stagnacji.
Dziękuję za radę.
może być zainteresowany w http://www.gorillatoolkit.org/pkg/mux jeśli tylko szukasz abstrakcji routingu. – dskinner
+1. mux lub http://www.gorillatoolkit.org/pkg/pat są znakomite do tego, aby je streścić. – minikomi