Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan dan Mengembalikan Ralat dengan Anggun dalam Pengendalian Permintaan HTTP Go?
Menamatkan Permintaan HTTP dengan Pengendalian Ralat
Apabila membangunkan perkhidmatan API menggunakan HTTP dalam Go, mungkin perlu membatalkan permintaan dan mengembalikan mesej ralat jika syarat tertentu tidak dipenuhi. Untuk mencapai ini, kaedah ServeHTTP() boleh digunakan dengan berkesan.
Returning from ServeHTTP()
Untuk menamatkan permintaan HTTP, return daripada kaedah ServeHTTP() . Dengan berbuat demikian, permintaan akan dihentikan dan respons boleh dihantar melalui fmt.Fprint(w, str) atau kaedah yang serupa. Contohnya:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Examine incoming params if !ok { str := `{"Result":"","Error":"No valide Var"}` fmt.Fprint(w, str) return } // Do normal API serving })
Kod Ralat HTTP
Dalam kes di mana parameter input tidak sah, menghantar kod ralat HTTP (cth., 400 untuk Permintaan Buruk) sebaliknya daripada lalai 200 OK disyorkan. Fungsi http.Error() boleh digunakan untuk tujuan ini:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Examine incoming params if !ok { http.Error(w, "Invalid input params!", http.StatusBadRequest) return } // Do normal API serving })
Memulangkan Data JSON dengan Kod Ralat
Untuk menghantar semula data JSON bersama-sama dengan kod ralat, kaedah Header().Set() boleh digunakan untuk menetapkan tajuk Content-Type dan kaedah WriteHeader() boleh digunakan untuk menetapkan status HTTP kod:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // Examine incoming params if !ok { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusBadRequest) str := `{"Result":"","Error":"No valide Var"}` fmt.Fprint(w, str) return } // Do normal API serving })
Propagating Returning
Apabila ralat dikesan di luar ServeHTTP(), keadaan ralat mesti disebarkan supaya ServeHTTP() boleh kembali. Pendekatan mudah ialah mengembalikan ralat daripada fungsi dalaman, yang akan menyebabkan kaedah ServeHTTP() kembali juga. Contohnya, dengan jenis params tersuai:
type params struct { // fields for your params } func decodeParams(r *http.Request) (*params, error) { p := new(params) // decode params; if they are invalid, return an error: if !ok { return nil, errors.New("Invalid params") } // If everything goes well: return p, nil } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { p, err := decodeParams(r) if err != nil { http.Error(w, `Invalid input params!`, http.StatusBadRequest) return } // Do normal API serving })
Dengan menggunakan pendekatan ini, anda boleh menamatkan permintaan HTTP dengan berkesan dan mengembalikan mesej ralat yang bermakna apabila perlu, memastikan perkhidmatan API anda mengendalikan input tidak sah dengan anggun dan menyampaikan keadaan ralat seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana Mengendalikan dan Mengembalikan Ralat dengan Anggun dalam Pengendalian Permintaan HTTP Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!