Rumah >pembangunan bahagian belakang >Golang >Pergi Panik: Bagaimana untuk Menyahpepijat 'Alamat Memori Tidak Sah atau Nyahrujuk Penunjuk Tiada' Ralat?

Pergi Panik: Bagaimana untuk Menyahpepijat 'Alamat Memori Tidak Sah atau Nyahrujuk Penunjuk Tiada' Ralat?

Linda Hamilton
Linda Hamiltonasal
2024-12-21 04:45:10799semak imbas

Go Panic: How to Debug

Pergi: Panik: Ralat Masa Jalan: Alamat Memori Tidak Sah atau Penolakan Penunjuk Nil

Soalan:

Apabila melaksanakan program Go, saya menghadapi perkara berikut panik:

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

goroutine 1 [running]:
main.getBody(0x1cdcd4, 0xf800000004, 0x1f2b44, 0x23, 0xf84005c800, ...)
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:65 +0x2bb
main.getToken(0xf84005c7e0, 0x10)
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:140 +0x156
main.main()
        /Users/matt/Dropbox/code/go/scripts/cron/fido.go:178 +0x61

Walaupun cuba menangkap ralat, saya tidak dapat mengenal pasti puncanya. Program ini berjalan pada mesin tanpa akses kepada pelayan API yang disenaraikan dalam kod, tetapi saya menjangkakan tindak balas ralat yang sesuai.

Bolehkah anda membantu saya dalam menyelesaikan isu ini?

Jawapan :

Panik mungkin disebabkan oleh mengakses res.Body sebelum menyemak ralat bukan nol dalam kaedah klien.Do(). Menurut dokumentasi untuk func (*Client) Do, ralat dikembalikan jika disebabkan oleh dasar klien atau ralat protokol HTTP. Walau bagaimanapun, respons bukan 2xx tidak menyebabkan ralat dan medan resp.Body masih mengandungi nilai bukan nol.

Untuk menyelesaikan isu itu, semak ralat itu serta-merta selepas memanggil klien.Do():

res, err := client.Do(req)

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

Atas ialah kandungan terperinci Pergi Panik: Bagaimana untuk Menyahpepijat 'Alamat Memori Tidak Sah atau Nyahrujuk Penunjuk Tiada' Ralat?. 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