如何在 Go 中处理对 / 的不同方法的 http 请求?
技术问答
251 人阅读
|
0 人回复
|
2023-09-12
|
我试图找出正确的处理方法Go 请求的最佳方式,/和只/在 Go 中处理,以不同的方式处理不同的方法。这是我最好的想法:6 Q8 E, | J8 `- g9 ^* G- Y
package mainimport ( "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 == "OST" fmt.Fprintf(w,"OST,%q",html.EscapeString(r.URL.Path)) else http.Error(w,"Invalid request method.",405) }) log.Fatal(http.ListenAndServe(":8080",nil))}3 b& L' o: C# `4 Q/ L6 t
这是惯用 Go 语言http lib 做最好的事吗?我更喜欢做一些事情,就像http.HandleGet("/",handler)express 或 Sinatra那样的事情。有没有简单的写作 REST 良好的服务框架?web.go看上去很有吸引力,但似乎停滞不前。
. e. w& p/ n7 y! u感谢您的建议。
& C* H6 k: W9 B4 L1 u8 A $ t4 @5 x3 n1 `0 z4 G+ a
解决方案:
+ V" O7 e" l7 X. w 确保你只为根服务:你在做正确的事情。在某些情况下,您可能希望调用 http.FileServer 对象的 ServeHttp 方法而不是调用 NotFound;这取决于你是否还有其他文件要提供。" o% B% K ?! Y0 ?0 E7 I
以不同的方式处理不同的方法:我的许多 HTTP 处理程序只包含这样的 switch 语句:
# P( s: }/ s; hswitch r.Method {case http.MethodGet: // Serve the resource.case http.MethodPost: // Create a new record.case http.MethodPut: // Update an existing record.case http.MethodDelete: // Remove the record.default: http.Error(w,"Method not allowed",http.StatusMethodNotAllowed)}
: ]/ ?( Q9 W7 s. g 当然,你可能会发现 gorilla 这样的第三方软件包更适合你。 |
|
|
|
|
|