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!