Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Ralat 'alamat memori tidak sah atau penolakan penunjuk nil' Semasa Mengakses Medan Peta dalam Go?
Ralat Akses Peta: "alamat memori tidak sah atau penyahrujukan tiada rujukan"
Masalah:
Apabila cuba mengakses medan struct daripada peta, ralat berlaku menunjukkan alamat memori tidak sah atau tiada dereference penunjuk. Ralat ini timbul secara khusus pada baris di mana sekeping penunjuk (*rentetan) diberikan kepada medan dalam jagaan.Syarat struct.
Kod:
condition := map[string]*guardduty.Condition{} condition["id"].Equals = strPtr
Ralat:
invalid memory address or nil pointer dereference gdreport/main.go:30 +0x1e6
Penjelasan:
Ralat berpunca daripada fakta bahawa peta keadaan pada mulanya adalah peta kosong bagi petunjuk. Apabila mengakses kekunci "id", anda dengan berkesan cuba mendapatkan nilai nol *guardduty.Condition. Ini menerangkan ralat, kerana mengakses medan Equals bagi penunjuk sifar adalah tidak sah.
Penyelesaian:
Untuk menyelesaikan isu ini, anda mesti menyemak sama ada "id" kunci " wujud dalam peta keadaan. Jika tidak, anda boleh memulakan tugas pengawalan baharu.Syaratkan dan berikannya kepada kekunci "id".
Kod Kemas Kini:
if _, ok := condition["id"]; !ok { // <nil> false log.Println("Pointer is null") } else { // Init new guardduty.Condition // and assign to required key nc := &guardduty.Condition{Equals: strPtr} condition["id"] = nc }
Dengan menyemak kewujudan kunci terlebih dahulu, anda boleh mengelak daripada mencuba untuk mengakses penuding sifar, memastikan kod tersebut dilaksanakan seperti yang dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Ralat 'alamat memori tidak sah atau penolakan penunjuk nil' Semasa Mengakses Medan Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!