Mengapa Mengindeks Peta yang Dilalui oleh Penunjuk dalam Go Menyebabkan Ralat Penyusunan?

Mary-Kate Olsen
Lepaskan: 2024-11-13 00:36:02
asal
898 orang telah melayarinya

Why Does Indexing a Map Passed by Pointer in Go Cause Compilation Errors?

Melalui Peta mengikut Nilai lwn. Penunjuk dalam Go

Dalam Go, lulus dengan nilai dan dengan penunjuk boleh mengelirukan, terutamanya apabila berurusan dengan jenis peta. Artikel ini menangani isu mengindeks peta yang diluluskan oleh penuding, yang membawa kepada ralat penyusunan.

Masalahnya

Apabila cuba menghantar peta dengan penuding dan mengubah suainya nilai, Go menimbulkan ralat yang jenis itu tidak menyokong pengindeksan. Ini kerana pengindeksan pada penuding tidak disokong untuk peta.

Penyelesaian

Untuk mengelakkan ralat ini, nyahrujuk penuding sebelum mengindeks peta. Daripada b[amount.Currency], gunakan (*b)[amount.Currency].

Perbincangan Lanjut

Secara lalai, jenis mudah seperti integer diluluskan oleh nilai, manakala struct dan antara muka diluluskan dengan rujukan. Walau bagaimanapun, ini tidak berlaku untuk peta. Peta dihantar melalui rujukan secara lalai, jadi menghantarnya melalui nilai atau penuding pada asasnya adalah sama.

Dalam contoh di atas, menggunakan penerima penuding untuk kaedah Tambah adalah tidak perlu kerana peta sudah diluluskan melalui rujukan. Kaedah ini boleh ditulis seperti berikut tanpa kehilangan kefungsian:

func (b Balance) Add(amount Amount) Balance {
    current, ok := b[amount.Currency]
    if ok {
        b[amount.Currency] = current + amount.Value
    } else {
        b[amount.Currency] = amount.Value
    }
    return b
}
Salin selepas log masuk

Ringkasnya, apabila bekerja dengan peta, tidak perlu menghantarnya melalui penunjuk untuk mengelakkan penyalinan. Melepasi nilai mencapai hasil yang sama tanpa perlu membuat rujukan.

Atas ialah kandungan terperinci Mengapa Mengindeks Peta yang Dilalui oleh Penunjuk dalam Go Menyebabkan Ralat Penyusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan