Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Go Throw 'Operasi Tidak Sah - Taip Nilai [kunci] Peta Tidak Menyokong Pengindeksan'?

Mengapa Go Throw 'Operasi Tidak Sah - Taip Nilai [kunci] Peta Tidak Menyokong Pengindeksan'?

Patricia Arquette
Patricia Arquetteasal
2024-11-21 07:42:18519semak imbas

Why Does Go Throw

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!

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