Map merupakan built-in data struktur yang menghubungkan nilai dengan kuncinya. Tidak seperti array, dimana nilainya di asosiasikan menggunakan urutan lokasi integer, map dapat menggunakan tipe data lain untuk digunakan sebagai kunci.

Mendefinisikan dan Mengelompokkan Data Menggunakan Map

Map dibuat dengan menggunakan built-in fungsi make() seperti slice. jenis dari map didefinisikan menggunakan keyword map, diikuti jenis kunci dalam kurung kotak, dan diikuti jenis nilainya.

Argumen terakhir pada make merupakan kapasitas dari map. Seperti halnya slice, map ukurannya otomatis disesuaikan, jadi ukuran adalah opsional.

package main

import "fmt"

func main() {
	produk := make(map[string]float64, 10)
	produk["Topi"] = 45000
	produk["Masker"] = 15000

	fmt.Println("Ukuran produk:", len(produk))
	for k, v := range produk {
		fmt.Println(k, v)
	}
}

Menggunakan sintak literal

Map juga bisa didefinisikan menggunakan sintak literal, dimana kunci dan nilainya di pisahkan dengan titik dua (:) dan setiap literal diakhiri dengan tanda koma (,).

package main

import "fmt"

func main() {
	produk := map[string]float64{
		"Topi":   45000,
		"Masker": 15000,
	}
	fmt.Println("Ukuran produk:", len(produk))
	fmt.Println("Harga:", produk["Topi"])
	fmt.Println("Harga:", produk["Tas"])
}

Pada contoh program diatas kita juga mencoba melihat nilai produk dengan kunci Tas dimana tidak tersedia pada produk map. Ketika program dijalankan nilai yang ditampilkan adalah nol (0).

Memeriksa nilai pada

Seperti contoh program sebelumnya map mengembalikan nilai 0 ketika disitu tidak ada item dengan kunci tersebut. Hal ini bisa membingungkan antara kita mempunyai data dengan nilai 0 dengan kunci yang tidak didefinisikan.

Untuk mengatasi masalah ini map memiliki dua nilai ketika kita mencoba melihat nilai.

package main

import "fmt"

func main() {
	produk := map[string]float64{
		"Topi":   45000,
		"Masker": 15000,
        "Tas":0,
	}
	fmt.Println(produk["Tas"])

	nilai, ok := produk["Tas"]
	if ok {
		fmt.Println("Harga:", nilai)
	} else {
		fmt.Println("Produk tidak ada")
	}
}

Nilai pertama nilai merupakan nilai yang dilihat, atau zero value jika tidak ada kunci dalam map tersebut. nilai kedua ok adalah nilai boolean dimana jika nilainya ada maka akan mengembalikan nilai true atau false jika kunci tidak ada dalam map.

Menghapus Item dari Map

Kita bisa menghapus nilai pada map menggunakan fungsi delete(). Argumen yang diperlukan oleh fungsi delete() adalah map dan kunci yang akan dihapus.

package main

import "fmt"

func main() {
	produk := map[string]float64{
		"Topi":   45000,
		"Masker": 15000,
		"Tas":    0,
	}
	delete(produk, "Tas")

	nilai, ok := produk["Tas"]
	if ok {
		fmt.Println("Harga:", nilai)
	} else {
		fmt.Println("Produk tidak ada")
	}
}

Menampilkan Nilai map secara berurutan.

Ketika menambahkan nilai kedalam map, kita tentu tidak dapat menjamin datanya bisa terurut. Jika ingin mengurutkan nilai map kita bisa menggunakan kunci dari map untuk dijadikan slice dan mengurutkannya menggunakan fungsi sort.String().

package main

import (
	"fmt"
	"sort"
)

func main() {
	produk := map[string]float64{
		"Topi":   45000,
		"Masker": 15000,
		"Tas":    0,
	}
	kunci := make([]string, 0, len(produk))
	for k, _ := range produk {
		kunci = append(kunci, k)
	}

	sort.Strings(kunci)
	for _, k := range kunci {
		fmt.Println("Kunci:", k, "Nilai:", produk[k])
	}
}