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!