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

Bagaimana Mengendalikan dan Menamatkan Permintaan HTTP dengan Anggun dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-01 14:28:10260semak imbas

How to Gracefully Handle and Terminate HTTP Requests in Go?

Menamatkan atau Menggugurkan Permintaan HTTP

Untuk menangani ralat semasa pengendalian API, adalah penting untuk menamatkan atau membatalkan permintaan itu. Walaupun pilihan seperti log.fatal dan os.Exit boleh menamatkan keseluruhan perkhidmatan, ia menghalang penghantaran mesej ralat. Artikel ini meneroka pendekatan alternatif menggunakan panik, tangguh, pulih dan kembali.

Pengendalian Ralat dengan pemulangan

Kaedah paling mudah adalah untuk kembali daripada fungsi ServeHTTP():

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Check parameters
    if !ok {
        str := `{"Result":"","Error":"Invalid Parameters"}`
        fmt.Fprint(w, str)
        return // Terminates the request
    }

    // Normal API handling
})

Pendekatan ini berfungsi dengan baik untuk fungsi pengendali HTTP utama, tetapi dalam fungsi bersarang, ia hanya wujud fungsi, bukan pemanggil.

Kod Ralat HTTP dan Respons Tersuai

Daripada kod respons 200 OK lalai, pertimbangkan untuk mengembalikan kod ralat HTTP yang sesuai. http.Error() membenarkan mesej ralat tersuai:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    if !ok {
        http.Error(w, `Invalid Input Parameters!`, http.StatusBadRequest)
        return
    }

    // Normal API handling
})

Untuk kawalan yang lebih terperinci, anda boleh menetapkan jenis kandungan tersuai dan badan respons:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    if !ok {
        w.Header().Set("Content-Type", "application/json")
        w.WriteHeader(http.StatusBadRequest)
        str := `{"Result":"","Error":"Invalid Input Parameters"}`
        fmt.Fprint(w, str)
        return
    }

    // Normal API handling
})

Penyebaran Ralat dengan menangguhkan dan pulih

Jika pengesanan ralat berlaku di luar ServeHTTP(), tangguh dan pulih boleh digunakan untuk menyebarkan keadaan ralat kepada pengendali utama:

type params struct {
    // Parameter fields
}

func decodeParams(r *http.Request) (*params, error) {
    p := new(params)
    defer func() {
        if r := recover(); r != nil {
            log.Println(r)
            return
        }
    }()
    // Parameter decoding
    if !ok {
        panic(errors.New("Invalid Parameters"))
    }

    return p, nil
}

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    p, err := decodeParams(r)
    if err != nil {
        http.Error(w, `Invalid Input Parameters!`, http.StatusBadRequest)
        return
    }

    // Normal API handling
})

Dalam pendekatan ini, tangguh mendaftarkan fungsi pembersihan yang memastikan fungsi recover() akan dilaksanakan tanpa mengira pemulangan atau panik fungsi. Jika decodeParams mengesan parameter yang tidak sah, ia panik, dengan berkesan mengembalikan ralat daripada ServeHTTP() dan membenarkannya mengembalikan mesej ralat.

Atas ialah kandungan terperinci Bagaimana Mengendalikan dan Menamatkan Permintaan HTTP dengan Anggun dalam 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