← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 15

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]`.