Operasi Tidak Sah: Pengindeksan Penunjuk Peta Membingungkan Go
Apabila memanipulasi peta dalam Go, seseorang mungkin menghadapi mesej ralat: "operasi tidak sah - jenis nilai[kunci]peta tidak menyokong pengindeksan." Ralat ini timbul apabila cuba mengindeks penuding peta (nilai[kunci]peta) dan bukannya nilai peta itu sendiri. Bertentangan dengan norma dengan struct, penyahrujukan tidak automatik untuk peta.
Kunci untuk menyelesaikan isu ini ialah dengan menyahrujuk penuding untuk mengakses nilai peta sebelum melaksanakan operasi pengindeksan. Pertimbangkan contoh berikut:
func (b *Balance) Add(amount Amount) *Balance { // Dereference the pointer to access the map current, ok := (*b)[amount.Currency] if ok { (*b)[amount.Currency] = current + amount.Value } else { (*b)[amount.Currency] = amount.Value } return b }
Dalam senario ini, "nilai[kunci]peta" dinyahrujuk menggunakan operator "" untuk mendedahkan nilai peta sebenar sebelum pengindeksan.
Pengendalian penunjuk Go untuk peta berbeza daripada struct. Untuk mengelakkan penyalinan yang berlebihan, anda tidak perlu mentakrifkan fungsi penerima yang mengambil penunjuk peta. Sebaliknya, hantar nilai peta secara langsung, seperti yang ditunjukkan dalam coretan kod asal.
Dengan memahami nuansa halus penunjuk peta dalam Go, pengaturcara boleh menyelesaikan mesej ralat yang penuh teka-teki ini dengan berkesan dan memanipulasi peta dengan yakin tanpa memerlukan perkara yang tidak perlu. penyalinan nilai.
Atas ialah kandungan terperinci Mengapa Go Throw 'Operasi Tidak Sah - Taip Nilai [kunci] Peta Tidak Menyokong Pengindeksan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!