Rumah >pembangunan bahagian belakang >Golang >pengubahsuaian peta segerak golang

pengubahsuaian peta segerak golang

WBOY
WBOYasal
2023-05-10 09:30:06786semak imbas

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:

  1. Nilai penyegerakan. Jenis peta tidak boleh diubah suai Jika kita ingin mengemas kini nilai, kita harus mendapatkan nilai melalui kaedah Julat dan kemudian tulis semula nilai baharu.
  2. Apabila menggunakan sync.Map, anda mesti memberi perhatian kepada isu pemprosesan serentak untuk mengelakkan ketidakkonsistenan data dan isu lain.

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!

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
Artikel sebelumnya:senarai golang kepada jsonArtikel seterusnya:senarai golang kepada json