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
Lepaskan: 2024-12-01 14:28:10
asal
256 orang telah melayarinya

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
})
Salin selepas log masuk

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
})
Salin selepas log masuk

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
})
Salin selepas log masuk

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
})
Salin selepas log masuk

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 Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan