終止 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 OK。
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中文網其他相關文章!