Rumah >pembangunan bahagian belakang >Golang >Go Panic: Alamat Memori Tidak Sah atau Penolakan Penunjuk Nil: Bagaimana untuk Membetulkan Pengendalian Ralat yang Salah?

Go Panic: Alamat Memori Tidak Sah atau Penolakan Penunjuk Nil: Bagaimana untuk Membetulkan Pengendalian Ralat yang Salah?

DDD
DDDasal
2025-01-05 13:00:40241semak imbas

Go Panic: Invalid Memory Address or Nil Pointer Dereference: How to Fix Incorrect Error Handling?

Go: Panic: Runtime Error: Invalid Memory Address or Nol Pointer Dereference

Apabila melaksanakan program Go, anda mungkin mengalami panik dengan mesej ralat berikut:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x38 pc=0x26df]

Ralat ini selalunya menunjukkan isu dalam cara program anda mengendalikan alamat memori atau penunjuk. Mari kita pecahkan punca yang mungkin:

Masalah: Pengendalian Ralat Salah

Dalam kod Go yang disediakan, terdapat isu dalam fungsi getBody semasa mengendalikan respons daripada HTTP pelanggan:

if err != nil {
    return nil, err
}
...
if err != nil {
    return nil, err
}

Yang pertama if err != semakan tiada berlaku sebelum mengakses respons body:

if err != nil {
    return nil, err
}

res, err := client.Do(req)

Walau bagaimanapun, pernyataan tangguh untuk menutup badan respons (res.Body) dilaksanakan serta-merta, walaupun sebelum semakan ralat. Ini boleh mengakibatkan percubaan pramatang untuk menutup badan dan membawa kepada ralat "alamat memori tidak sah".

Penyelesaian:

Untuk menyelesaikan isu ini, alihkan ralat semak sebelum mengakses dan menutup badan respons:

res, err := client.Do(req)

if err != nil {
    return nil, err
}

defer res.Body.Close()

Dengan berbuat demikian, kod menyemak dengan betul sebarang kemungkinan ralat sebelum bekerja dengan respons badan, menghalang ralat "alamat memori tidak sah".

Atas ialah kandungan terperinci Go Panic: Alamat Memori Tidak Sah atau Penolakan Penunjuk Nil: Bagaimana untuk Membetulkan Pengendalian Ralat yang Salah?. 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