Rumah > Artikel > pembangunan bahagian belakang > pengubahsuaian peta segerak golang
Baru-baru ini saya menghadapi masalah tentang penyegerakan. Jenis peta apabila menggunakan bahasa Go: cara mengubah suai data di dalamnya, terutamanya dalam persekitaran serentak. Di sini saya ingin berkongsi pemahaman dan penyelesaian saya.
Jenis sync.Map dalam bahasa Go ialah Peta selamat benang yang boleh digunakan dalam persekitaran serentak. Penggunaannya sangat mudah. Anda boleh menentukan penyegerakan. Pembolehubah peta melalui kod berikut:
var m sync.Map
Seterusnya, anda boleh membaca dan menulis elemen melalui kaedah Muat dan Simpan, contohnya:
m.Store("key1", "value1") v, ok := m.Load("key1")
Apa yang perlu diperhatikan dalam proses ini ialah parameter pertama kaedah Kedai ialah kunci, parameter kedua ialah nilai, dan kaedah Muatkan mempunyai dua nilai pulangan, yang pertama ialah nilai, dan yang kedua ialah bool jenis. Nilai yang menunjukkan sama ada kunci ditemui.
Tetapi bagaimana jika kita perlu mengubah suai elemen dalam penyegerakan.Peta? Nilai tidak boleh diubah suai terus melalui subskrip seperti jenis peta biasa. Mari lihat apa yang dikatakan oleh dokumentasi rasmi Go tentang pengubahsuaian:
It must not be copied after first use. To avoid ownership issues, values stored in the Map should not be modified.
Dokumentasi menyatakan bahawa nilai dalam sync.Map tidak boleh diubah suai. Ini kerana peta ialah jenis rujukan dan jika kami mengubah suainya, ia mungkin menjejaskan coroutine lain, menyebabkan keadaan perlumbaan dan ketidakkonsistenan data.
Jadi, jika kita ingin mengubah suai pasangan nilai kunci sedia ada, apakah yang perlu kita lakukan?
Malah, kita boleh menggunakan kaedah Julat di dalam penyegerakan. Jenis peta untuk membaca elemen yang perlu diubah suai melalui kaedah ini dahulu, dan kemudian menulis semula nilai baharu. Kod sampel adalah seperti berikut:
m.Range(func(key, value interface{}) bool { if key == "key1" { m.Store(key, "newvalue") } return true })
Di sini kita mula-mula melintasi keseluruhan Peta melalui kaedah Julat, dan kemudian menentukan sama ada kunci yang perlu diubah suai wujud. Jika wujud, tulis semula nilai baharu melalui kaedah Kedai. Perlu diingat bahawa jika kaedah Julat mengembalikan palsu, operasi traversal akan berhenti.
Akhir sekali, kita perlu meringkaskan:
Semoga artikel ini dapat membantu anda. Jika ada apa-apa yang tidak sesuai, pembaca tolong beri saya nasihat!
Atas ialah kandungan terperinci pengubahsuaian peta segerak golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!