Peta di Go adalah jenis data bersekutu terbina dalam yang membolehkan anda menyimpan pasangan nilai kunci. Mereka dilaksanakan sebagai jadual hash, memberikan akses yang cekap kepada nilai -nilai yang disimpan di dalamnya. Peta tidak teratur, yang bermaksud bahawa urutan kunci dan nilai boleh berubah semasa pelaksanaan program.
Untuk membuat peta di Go, anda menggunakan fungsi make
dengan kata kunci map
. Sintaks untuk mengisytiharkan peta adalah seperti berikut:
<code class="go">myMap := make(map[keyType]valueType)</code>
Di sini, keyType
adalah jenis kunci, dan valueType
adalah jenis nilai. Sebagai contoh, untuk membuat peta rentetan kepada bilangan bulat:
<code class="go">ages := make(map[string]int)</code>
Anda juga boleh memulakan peta dengan nilai pada masa pengisytiharan menggunakan literal komposit:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, }</code>
Untuk menambah pasangan nilai utama ke peta, anda menggunakan sintaks berikut:
<code class="go">ages["Charlie"] = 35</code>
Untuk mendapatkan nilai dari peta, anda menggunakan kunci:
<code class="go">age := ages["Alice"]</code>
Jika anda cuba mendapatkan nilai untuk kunci yang tidak wujud dalam peta, anda akan mendapat nilai sifar untuk jenis nilai. Untuk memeriksa sama ada kunci wujud sebelum mengakses nilainya, anda boleh menggunakan tugasan pelbagai nilai:
<code class="go">age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
Untuk memadam pasangan nilai utama dari peta, anda menggunakan fungsi delete
:
<code class="go">delete(ages, "Bob")</code>
Menggunakan Peta dalam Pengaturcaraan Go menyediakan beberapa manfaat utama:
len
untuk mendapatkan bilangan penyertaan, dan delete
untuk menghapuskan entri. Untuk melangkah dengan cekap di atas peta di GO, anda boleh menggunakan kata kunci range
dalam gelung for
. Kata kunci range
membolehkan anda mengakses kedua -dua kunci dan nilai setiap entri dalam peta. Berikut adalah contoh:
<code class="go">ages := map[string]int{ "Alice": 30, "Bob": 25, "Charlie": 35, } for key, value := range ages { fmt.Printf("Name: %s, Age: %d\n", key, value) }</code>
Ini akan melangkah ke atas semua pasangan nilai utama dalam peta, mencetak setiap nama dan umur. Perhatikan bahawa urutan di mana pasangan nilai utama dikunjungi tidak dijamin, kerana peta tidak semestinya tidak teratur.
Jika anda hanya perlu melangkah ke atas kunci, anda boleh menggunakan sintaks berikut:
<code class="go">for key := range ages { fmt.Printf("Name: %s\n", key) }</code>
Sekiranya anda perlu melangkah ke atas nilai sahaja, anda boleh menggunakan pengenal kosong _
untuk kunci:
<code class="go">for _, value := range ages { fmt.Printf("Age: %d\n", value) }</code>
Semasa bekerja dengan peta di Go, terdapat beberapa kesilapan biasa yang harus dielakkan:
Tidak menyemak kewujudan utama : Apabila mengambil nilai dari peta, mudah lupa untuk memeriksa sama ada kunci wujud. Gagal berbuat demikian boleh menyebabkan nilai sifar yang tidak dijangka digunakan dalam kod anda.
<code class="go">// Incorrect age := ages["David"] // If "David" doesn't exist, age will be 0 // Correct age, exists := ages["David"] if !exists { fmt.Println("David is not in the map") }</code>
Serentak menulis : Menulis ke peta dari pelbagai goroutine tanpa penyegerakan yang betul boleh membawa kepada keadaan kaum dan tingkah laku yang tidak ditentukan.
<code class="go">// Incorrect go func() { ages["Eve"] = 40 }() go func() { ages["Frank"] = 45 }() // Correct var mutex sync.Mutex go func() { mutex.Lock() ages["Eve"] = 40 mutex.Unlock() }() go func() { mutex.Lock() ages["Frank"] = 45 mutex.Unlock() }()</code>
Menggunakan jenis yang tidak boleh dibandingkan sebagai kunci : peta memerlukan kunci untuk dibandingkan, jadi menggunakan jenis yang tidak dapat dibandingkan seperti kepingan atau peta sebagai kunci akan menghasilkan ralat kompilasi.
<code class="go">// Incorrect invalidMap := make(map[[]int]int) // Will not compile // Correct validMap := make(map[string]int)</code>
Menghadapi Inisialisasi Peta : Cuba menggunakan peta tanpa permulaan yang betul akan menghasilkan panik runtime.
<code class="go">// Incorrect var ages map[string]int ages["Alice"] = 30 // This will panic // Correct ages := make(map[string]int) ages["Alice"] = 30</code>
Dengan mengelakkan kesilapan biasa ini, anda boleh menggunakan peta dengan berkesan dan selamat dalam program Go anda.
Atas ialah kandungan terperinci Apakah peta di Go? Bagaimana anda membuat dan menggunakannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!