Menamatkan Pemprosesan Permintaan HTTP
Apabila menyampaikan permintaan HTTP, mungkin terdapat senario di mana ia menjadi perlu untuk menamatkan pemprosesan dan menghantar respons ralat . Ini boleh dicapai dengan kembali daripada kaedah 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 })
Menggunakan Kod Ralat HTTP
Untuk pengendalian ralat yang lebih canggih, adalah disyorkan untuk mengembalikan yang sesuai Kod ralat HTTP dan bukannya 200 lalai 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 })
Jawapan Ralat Berformat JSON
Untuk memberikan respons ralat yang lebih terperinci dalam format 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 })
Menyebarkan Ralat daripada Fungsi Bersarang
Jika pengendalian ralat dilakukan dalam fungsi yang dipanggil daripada ServeHTTP(), keadaan ralat mesti dikembalikan untuk membolehkan ServeHTTP() menamatkan pemprosesan permintaan:
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 }
Atas ialah kandungan terperinci Bagaimana Mengendalikan dan Menamatkan Pemprosesan Permintaan HTTP dengan Anggun dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!