Map
Pasangan kunci–nilai untuk data yang dicari berdasarkan nama.
Pahami konsepnya
Map menyimpan pasangan kunci–nilai dan cocok untuk data yang dicari berdasarkan nama, bukan posisi: stok barang, umur teman, atau pengaturan aplikasi. Buat dengan literal map[string]int{...} atau dengan make(map[string]int) bila mulai kosong. Kunci harus tipe yang bisa dibandingkan (comparable) — string, angka, bool, atau gabungannya.
Mengakses kunci yang tidak ada tidak membuat program gagal — ia mengembalikan nilai nol tipenya. Karena "nol" bisa berarti nilai asli nol atau kunci memang tidak ada, Go menyediakan bentuk dua nilai: v, ok := m[k], di mana ok bernilai true hanya bila kuncinya benar-benar tersedia.
delete(m, k) menghapus entri dan len(m) menghitung pasangan yang tersimpan. Saat disusuri dengan for range, urutan keluarannya TIDAK dijamin — bila butuh urutan pasti, ambil kunci-kuncinya, urutkan, lalu iterasi sesuai urutan itu. Nilai map juga bisa berupa tipe majemuk seperti slice atau map lain.
Coba contoh kode
package main
import "fmt"
func main() {
stok := map[string]int{"kopi": 12, "teh": 8}
stok["susu"] = 5
jumlah, ada := stok["teh"]
fmt.Println(jumlah, ada)
}Baris stok["susu"] = 5 menambahkan kunci baru pada map. jumlah, ada := stok["teh"] mengambil nilai 8 sekaligus konfirmasi true. Bila "teh" dihapus dengan delete, akses yang sama mengembalikan 0 dan false — itulah alasan pola ok layak dijadikan kebiasaan.
Iterasi terurut
package main
import (
"fmt"
"slices"
)
func main() {
umur := map[string]int{"citra": 19, "adi": 21, "budi": 20}
for nama, u := range umur {
fmt.Println(nama, u) // urutan acak tiap jalankan
}
kunci := []string{}
for nama := range umur {
kunci = append(kunci, nama)
}
slices.Sort(kunci)
for _, nama := range kunci {
fmt.Println(nama, umur[nama]) // selalu adi, budi, citra
}
}Iterasi langsung lewat range menghasilkan urutan acak — Go sengaja mengacaknya. Untuk keluaran stabil: kumpulkan kunci ke slice, urutkan, lalu akses nilainya satu per satu menurut urutan itu.
Latihan singkat
Uji: kurangi stok kopi (2) dan HAPUS kunci yang habis — program harus mencetak persis `map[susu:5 teh:0]`.