Rumah >pembangunan bahagian belakang >Golang >Patutkah Saya Menutup Objek Respons HTTP Selepas Ralat `http.Get()`?

Patutkah Saya Menutup Objek Respons HTTP Selepas Ralat `http.Get()`?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 02:12:10832semak imbas

Should I Close the HTTP Response Object After an `http.Get()` Error?

Adakah Kita Perlu Menutup Objek Respons Jika Ralat Berlaku Semasa Memanggil http.Get(url)?

Apabila menggunakan http.Get (url), anda mungkin menghadapi senario di mana ralat berlaku semasa permintaan. Dalam kes sedemikian, persoalan timbul: adakah penting untuk menutup objek tindak balas?

Jawapan:

Mengikut prinsip pengaturcaraan umum, jika fungsi mengembalikan berbilang nilai , termasuk ralat, anda harus memeriksa nilai ralat terlebih dahulu. Jika terdapat ralat (err != nil), anda harus mengambil tindakan yang sewajarnya dan hanya meneruskan jika nilai err adalah nil.

Dalam kes http.Get(), ia mematuhi konsep ini. Jika ralat berlaku, ia mengembalikan respons sifar, seperti:

return nil, someError

Oleh itu, anda harus mengendalikannya 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

Perlu diperhatikan bahawa walaupun ralat berlaku dan respons bukan nol dikembalikan kerana kegagalan ubah hala, anda masih tidak perlu menutup badan respons. Walau bagaimanapun, jika anda berkeras untuk berbuat demikian, anda boleh menggunakan semakan bersyarat seperti:

if res != nil {
    defer res.Body.Close()
}

Dokumentasi http.Response memastikan bahawa sifat Body tidak akan menjadi sifar, tanpa mengira kehadiran atau ketiadaan data respons .

Atas ialah kandungan terperinci Patutkah Saya Menutup Objek Respons HTTP Selepas Ralat `http.Get()`?. 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