Map
Menyimpan pasangan key-value: membuat, membaca, menghapus, dan iterasi.
Map = kamus
Map menyimpan pasangan key → value dan mengambilnya dengan sangat cepat. Tipenya map[TipeKey]TipeValue.
nilai := map[string]int{
"budi": 85,
"sari": 92,
}
Membuat map kosong: m := make(map[string]int). Map yang belum dibuat (var m map[string]int) bernilai nil — membaca aman, menulis menyebabkan panic.
Operasi dasar
nilai["andi"] = 78 // tambah / ubah
fmt.Println(nilai["sari"]) // 92
delete(nilai, "budi") // hapus
fmt.Println(len(nilai)) // jumlah pasangan
Mengecek apakah key ada
Membaca key yang tidak ada mengembalikan zero value (mis. 0), sehingga kamu tidak bisa membedakan "tidak ada" dari "nilainya 0". Pakai bentuk dua nilai:
v, ok := nilai["dewi"]
if !ok {
fmt.Println("dewi tidak ada")
}
Ini disebut comma ok idiom.
Iterasi
for nama, skor := range nilai {
fmt.Println(nama, skor)
}
Urutan iterasi map acak dan sengaja dibuat berbeda tiap kali. Jika butuh urutan, kumpulkan key ke slice lalu sort.Strings.
Key yang boleh dipakai
Tipe yang bisa dibandingkan dengan ==: string, angka, bool, array, struct sederhana. Slice dan map tidak boleh jadi key.
Map berisi slice / struct
kelompok := map[string][]string{
"A": {"Ani", "Budi"},
}
kelompok["A"] = append(kelompok["A"], "Caca")
Map bukan thread-safe
Menulis ke map dari beberapa goroutine bersamaan menyebabkan crash. Gunakan sync.Mutex (atau sync.Map) — dibahas di bab konkurensi.