Rumah >pembangunan bahagian belakang >Golang >Mengapa Mengindeks Peta yang Dilalui oleh Penunjuk dalam Go Menyebabkan Ralat Penyusunan?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-13 00:36:02965semak imbas

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
}

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!

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