Rumah > pembangunan bahagian belakang > Golang > Apakah peta di Go? Bagaimana anda membuat dan menggunakannya?

Apakah peta di Go? Bagaimana anda membuat dan menggunakannya?

Robert Michael Kim
Lepaskan: 2025-03-19 12:20:33
asal
785 orang telah melayarinya

Apakah peta di Go? Bagaimana anda membuat dan menggunakannya?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Untuk menambah pasangan nilai utama ke peta, anda menggunakan sintaks berikut:

 <code class="go">ages["Charlie"] = 35</code>
Salin selepas log masuk

Untuk mendapatkan nilai dari peta, anda menggunakan kunci:

 <code class="go">age := ages["Alice"]</code>
Salin selepas log masuk

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>
Salin selepas log masuk

Untuk memadam pasangan nilai utama dari peta, anda menggunakan fungsi delete :

 <code class="go">delete(ages, "Bob")</code>
Salin selepas log masuk

Apakah faedah utama menggunakan peta dalam pengaturcaraan GO?

Menggunakan Peta dalam Pengaturcaraan Go menyediakan beberapa manfaat utama:

  1. Pencarian yang cekap : Peta di GO dilaksanakan sebagai jadual hash, yang membolehkan pencarian, penyisipan, dan penghapusan pasangan nilai utama, biasanya dalam kerumitan masa O (1).
  2. Fleksibiliti : Peta boleh menyimpan apa -apa jenis kunci dan nilai, selagi jenis utama adalah setanding. Ini membolehkan struktur data fleksibel yang boleh disesuaikan dengan keperluan khusus.
  3. SIZING DYNAMIC : Peta secara automatik mengendalikan saiz semula sebagai lebih banyak pasangan nilai utama ditambah, menghapuskan keperluan untuk pengurusan memori manual.
  4. Mudah digunakan : Sintaks untuk membuat, mengakses, dan mengubahsuai peta adalah mudah dan intuitif, menjadikannya mudah untuk diintegrasikan ke dalam kod anda.
  5. Sokongan terbina dalam : Go menyediakan fungsi dan kaedah terbina dalam untuk bekerja dengan peta, seperti len untuk mendapatkan bilangan penyertaan, dan delete untuk menghapuskan entri.
  6. Keselamatan Concurrency : Peta selamat untuk membaca dari pelbagai goroutin. Walau bagaimanapun, menulis ke peta serentak dari pelbagai goroutine memerlukan penggunaan primitif penyegerakan seperti mutexes.

Bagaimanakah anda dapat melangkah dengan cekap di atas peta?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Apa kesilapan biasa yang harus dielakkan ketika bekerja dengan peta di GO?

Semasa bekerja dengan peta di Go, terdapat beberapa kesilapan biasa yang harus dielakkan:

  1. 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>
    Salin selepas log masuk
  2. 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>
    Salin selepas log masuk
  3. Dengan mengandaikan perintah peta : kerana peta tidak semestinya tidak teratur, dengan mengandaikan perintah tertentu apabila melelehkan mereka boleh membawa kepada pepijat. Sentiasa merawat perintah lelaran sebagai tidak dapat diramalkan.
  4. 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>
    Salin selepas log masuk
  5. 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>
    Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan