Rumah >pembangunan bahagian belakang >Golang >Pergi Klien HTTP: Bagaimana untuk Mengelakkan 'panik: ralat masa jalan: alamat memori tidak sah atau tiada rujukan penuding'?

Pergi Klien HTTP: Bagaimana untuk Mengelakkan 'panik: ralat masa jalan: alamat memori tidak sah atau tiada rujukan penuding'?

DDD
DDDasal
2024-12-26 19:50:09937semak imbas

Go HTTP Client: How to Avoid

Go: panik: ralat masa jalan: alamat memori tidak sah atau penolakan penunjuk tiada

Apabila menjalankan program Go, panik boleh berlaku disebabkan oleh alamat ingatan yang tidak sah atau penolakan penunjuk nol. Mesej ralat ini selalunya menunjukkan isu masa jalan dan bukannya pepijat program tertentu.

Dalam kes ini, kod Go yang disediakan menunjukkan potensi masalah dengan pengendalian klien HTTP.

Isunya

Kod menggunakan kaedah func (*Client) Do untuk membuat permintaan HTTP. Walau bagaimanapun, ia gagal menyemak ralat yang dikembalikan oleh klien sebelum cuba mengakses badan respons.

Penyelesaian

Menurut dokumentasi untuk func (*Pelanggan) Lakukan, walaupun kod status HTTP bukan 2xx diterima, ia tidak menyebabkan ralat. Sebaliknya, ralat hanya dikembalikan jika ia disebabkan oleh dasar klien atau ralat protokol HTTP.

Kod, walau bagaimanapun, menyemak ralat selepas mengakses badan respons (res.Body). Ini boleh menyebabkan ralat dilemparkan disebabkan oleh alamat memori yang tidak sah atau penyahrujukan sifar.

Untuk menyelesaikan isu ini, kod harus diubah suai untuk menyemak ralat sebelum mengakses badan respons, seperti:

res, err := client.Do(req)

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

Atas ialah kandungan terperinci Pergi Klien HTTP: Bagaimana untuk Mengelakkan 'panik: ralat masa jalan: alamat memori tidak sah atau tiada rujukan penuding'?. 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