终止 HTTP 请求处理
在处理 HTTP 请求时,可能存在需要终止处理并发送错误响应的情况。这可以通过从 ServeHTTP() 方法返回来实现。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Inspect incoming parameters if !IsValid(r.URL.Query()) { str := `{"Result":"","Error":"Invalid Parameters"}` fmt.Fprint(w, str) return } // Continue normal API processing })
使用 HTTP 错误代码
对于更复杂的错误处理,建议返回适当的HTTP 错误代码而不是默认的 200好的。
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Inspect incoming parameters if !IsValid(r.URL.Query()) { http.Error(w, "Invalid Parameters", http.StatusBadRequest) return } // Continue normal API processing })
JSON 格式的错误响应
以 JSON 格式提供更详细的错误响应:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Inspect incoming parameters if !IsValid(r.URL.Query()) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusBadRequest) str := `{"Result":"","Error":"Invalid Parameters"}` fmt.Fprint(w, str) return } // Continue normal API processing })
从嵌套函数传播错误
如果错误处理在 ServeHTTP() 调用的函数中执行,必须返回错误状态以允许 ServeHTTP() 终止请求处理:
func decodeParams(r *http.Request) (*params, error) { p := new(params) // Decode parameters and check their validity if !ok { return nil, errors.New("Invalid Parameters") } return p, nil } func handleRequest(w http.ResponseWriter, r *http.Request) { p, err := decodeParams(r) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) return } // Continue normal API processing }
以上是如何在 Go 中优雅地处理和终止 HTTP 请求处理?的详细内容。更多信息请关注PHP中文网其他相关文章!