Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Ralat 'alamat memori tidak sah atau penolakan penunjuk nil' Semasa Mengakses Medan Peta dalam Go?

Bagaimana untuk Mengendalikan Ralat 'alamat memori tidak sah atau penolakan penunjuk nil' Semasa Mengakses Medan Peta dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-03 15:24:11850semak imbas

How to Handle

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!

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