Rumah > pembangunan bahagian belakang > Golang > Adakah Saya Perlu Menutup Badan Respons Selepas Ralat HTTP GET dalam Go?

Adakah Saya Perlu Menutup Badan Respons Selepas Ralat HTTP GET dalam Go?

Susan Sarandon
Lepaskan: 2024-12-22 05:07:09
asal
460 orang telah melayarinya

Do I Need to Close the Response Body After an HTTP GET Error in Go?

Adakah Ralat HTTP Memerlukan Penutupan Badan Respons?

Dalam pembangunan web, selalunya perlu untuk mengendalikan respons daripada permintaan HTTP. Fungsi http.Get(url) dalam Go digunakan untuk tujuan ini. Walau bagaimanapun, ia menimbulkan persoalan: adakah perlu untuk menutup badan tindak balas jika ralat berlaku semasa permintaan GET?

Pertimbangan Pengendalian Ralat

Mengikut prinsip pengaturcaraan umum , apabila fungsi mengembalikan berbilang nilai, salah satunya adalah ralat, ralat itu harus diperiksa terlebih dahulu sebelum meneruskan. Nilai bukan ralat harus mengembalikan nilai sifar jika terdapat ralat.

Kelakuan http.Get()

Dokumentasi untuk http.Get() tidak menyimpang dari prinsip ini. Oleh itu, pengendalian ralat hendaklah dikendalikan seperti berikut:

res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
    return
}

defer res.Body.Close()
// Read/work with body
Salin selepas log masuk

Kes Khas untuk Pengalihan

JimB mengesahkan bahawa apabila ralat bukan nol dikembalikan, walaupun jika respons adalah tidak sifar, tidak perlu menutupnya. Walau bagaimanapun, terdapat pengecualian dalam kes ralat ubah hala. Respons mungkin mengandungi konteks dan maklumat tambahan tentang tempat ubah hala gagal.

Menutup Badan Respons Tidak Nihil dengan Ralat

Jika anda ingin menutup badan respons apabila ada tindak balas dan ralat bukan nol, anda boleh melakukannya dalam salah satu daripada ini cara:

res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
}
if res != nil {
    defer res.Body.Close()
    // Read/work with body
}
Salin selepas log masuk
res, err := http.Get(url)
if err != nil {
    log.Printf("Error: %s\n", err)
}
if res == nil {
    return
}

defer res.Body.Close()
// Read/work with body
Salin selepas log masuk

Jaminan Badan Bukan Nihil

Dokumentasi untuk http.Response menjamin Response.Body tidak akan ada, walaupun jika tiada data tindak balas atau badan mempunyai sifar panjang.

Kesimpulan

Kesimpulannya, tidak perlu menutup badan tindak balas sekiranya berlaku ralat daripada http.Get(), melainkan ralat itu berkaitan ke arah semula. Walau bagaimanapun, adalah selamat untuk menutup badan jika tindak balasnya bukan nol, menggunakan salah satu pendekatan yang digariskan di atas.

Atas ialah kandungan terperinci Adakah Saya Perlu Menutup Badan Respons Selepas Ralat HTTP GET dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan