Rumah >pembangunan bahagian belakang >Golang >Bagaimana Mengendalikan dan Mengembalikan Ralat dengan Anggun dalam Pengendalian Permintaan HTTP Go?

Bagaimana Mengendalikan dan Mengembalikan Ralat dengan Anggun dalam Pengendalian Permintaan HTTP Go?

Linda Hamilton
Linda Hamiltonasal
2024-11-27 06:50:12738semak imbas

How to Gracefully Handle and Return Errors in Go HTTP Request Handling?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn