> For the complete documentation index, see [llms.txt](https://davidwinalda94.gitbook.io/mastering-golang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://davidwinalda94.gitbook.io/mastering-golang/map.md).

# Map

Pada sesi ini akan di bahas penggunaan tipe data Map pada Go

Map adalah tipe data pada Go berbentuk *key-value pair*. `map` mirip seperti slice, hanya saja indeks yang digunakan untuk pengaksesan bisa ditentukan sendiri tipe-nya (indeks tersebut adalah key).

```go
package main

import (
	"fmt"
)

func main() {
	var batch map[string]int

	batch["adorable"] = 20
	batch["brilliant"] = 10

	fmt.Println("Jumlah anggota batch adorable", batch["adorable"])
	fmt.Println("Jumlah anggota batch brilliant", batch["brilliant"])
}
```

![Error pada output program](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSh2INDJhSBooahQWU%2FScreen%20Shot%202021-02-01%20at%2020.06.56.png?alt=media\&token=19b72fde-9455-4587-ad2d-e698947a57d9)

Pada kode di atas jika dijalankan akan muncuk error ini karena pada `map` nilai default adalah `nil` sehingga kita harus membuat inisialisasi nilai default di awal seperti ini:

```go
package main

import (
	"fmt"
)

func main() {
	var batch map[string]int
	batch = map[string]int{} // Inisialisasi nilai default
	
	batch["adorable"] = 20
	batch["brilliant"] = 10

	fmt.Println("Jumlah anggota batch adorable", batch["adorable"])
	fmt.Println("Jumlah anggota batch brilliant", batch["brilliant"])
}

```

![Berhasil menampilkan data yang ada pada map](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSShc11Pk8CkK0pyP3Y%2FScreen%20Shot%202021-02-01%20at%2020.09.28.png?alt=media\&token=c2703099-7936-4711-a5fd-da61932cdf2c)

### Inisialisasi Nilai `map`

Kita juga bisa langsung memasukkan nilai pada variabel bertipe `map` dengan menggunakan literal `{}` seperti berikut ini:

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10}

	fmt.Println("Jumlah anggota batch adorable", batch["adorable"])
	fmt.Println("Jumlah anggota batch brilliant", batch["brilliant"])
}
```

![Output program berisi nilai map pada variabel batch](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSi_VwpU3qao1xoIkA%2FScreen%20Shot%202021-02-01%20at%2020.09.28.png?alt=media\&token=f61118ec-4545-4a4a-a002-302e14ce3985)

### Looping pada `map`

Kita bisa menggunakan `for` - `range` untuk looping pada `map` . Cara penerapannya masih sama seperti pada slice, pembedanya data yang dikembalikan di tiap perulangan adalah key dan value, bukan indeks dan elemen.

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10, "creative": 15}

	for key, val := range batch {
		fmt.Println(key, ":", val)
	}
}
```

![Menampilkan key dan value dari hasil looping variabel batch](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSjwbiKgHgW5YTjyO2%2FScreen%20Shot%202021-02-01%20at%2020.19.35.png?alt=media\&token=8956a415-9f1f-493d-8595-6664e2674710)

### Mutating Maps

Berikut adalah beberapa hal yang dapa kita lakukan pada `map` :

#### Insert or Update `map`

Untuk melakukan insert dan update data, kita dapat menggunakan cara berikut ini:

```go
m[key] = elem
```

Kita lihat bahwa kita harus mengetahui `key` dari `map` dan meng-assign nilai ke dalam `map` .

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10, "creative": 15}

	// Update value dari key "adorable"
	batch["adorable"] = 8
	fmt.Println(batch["adorable"])
}
```

![Mengupdate value dari key adorable ](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSsFKud7df9X6TCyNk%2FScreen%20Shot%202021-02-01%20at%2020.54.29.png?alt=media\&token=7f21e2a8-84a7-4085-a5aa-07bf31468790)

### Retrieve the element

Kita dapat menyimpan `value` dari `key` pada `map` dengan cara seperti berikut ini:

```
elem = m[key]
```

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10, "creative": 15}

	a := batch["adorable"]
	b := batch["brilliant"]
	c := batch["creative"]

	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
}

```

![Output program menampilkan nilai dari map batch](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSt8RXIpHmYDmHehEZ%2FScreen%20Shot%202021-02-01%20at%2020.59.48.png?alt=media\&token=1b96e963-8a04-41c6-ac06-95f8f312984c)

#### Delete elemen pada map

Kita juga dapat menghapus elemen pada `map` menggunakan function built-in `delete` .

```
delete(m, key)
```

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10, "creative": 15}

	delete(batch, "adorable")
	fmt.Println(batch["adorable"])
	fmt.Println(batch)
}
```

Dari kode di atas kita lihat bahwa kita menghapus elemen `map` pada `key` `adorable` sehingga jika kita akses `key` dari `adorable` dan isi dari map `batch` maka akan menghasilkan output seperti berikut ini:

![Output program dari penggunaan fungsi delete pada map](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSv2c5Cv1QIc6cqkH2%2FScreen%20Shot%202021-02-01%20at%2021.07.28.png?alt=media\&token=6f4b9104-e42e-4548-b9c8-780688c31b7c)

### Deteksi Keberadaan Item Dengan Key Tertentu <a href="#a175-deteksi-keberadaan-item-dengan-key-tertentu" id="a175-deteksi-keberadaan-item-dengan-key-tertentu"></a>

Ada cara untuk mengetahui apakah dalam sebuah variabel map terdapat item dengan key tertentu atau tidak, yaitu dengan memanfaatkan 2 variabel sebagai penampung nilai kembalian pengaksesan item

```
elem, ok = m[key]
```

```go
package main

import (
	"fmt"
)

func main() {
	batch := map[string]int{"adorable": 20, "brilliant": 10, "creative": 15}

	value, isExist := batch["dilligent"]

	if isExist {
		fmt.Println(value)
	} else {
		fmt.Println("item is not exists")
	}
}
```

![Tidak ditemukam value dari key dilligent](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSwV8gwFJm9xNd4SXl%2FScreen%20Shot%202021-02-01%20at%2021.14.25.png?alt=media\&token=52be64b0-387c-4090-9f61-e2a685c938e3)

### Slice of Map

Kita dapat menggunakan slice of map atau kombinasi antara slice dan map.

```go
package main

import (
	"fmt"
)

func main() {
	batch := []map[string]string{
		{"name": "adroable", "year": "2020"},
		{"name": "brilliant", "year": "2021"},
		{"name": "creative", "year": "2019"},
	}

	fmt.Println(batch)
}
```

Dari kode di atas dapat disimpulkan yaitu slice yang tipe tiap elemen-nya adalah `map[string]string` .

![Menampilkan isi slice bertipe map](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSz4HUX_uiE3olp731%2FScreen%20Shot%202021-02-01%20at%2021.23.50.png?alt=media\&token=d484353a-8045-400f-adb2-5ef58d7f532d)

Bagaimana jika kita ingin menghasilkan seluruh elemen slice yang bertipe map? kita daoat menggunakan looping `for` - `range` :

```go
package main

import (
	"fmt"
)

func main() {
	batch := []map[string]string{
		{"name": "adroable", "year": "2020"},
		{"name": "brilliant", "year": "2021"},
		{"name": "creative", "year": "2019"},
	}

	for _, value := range batch {
		fmt.Println(value["name"])
	}
}
```

![Hasil perulangan dari slice of map pada variabel batch](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MSScAYyBaPnYw8ZhkQM%2F-MSSzdHN9iT37NzAxUlL%2FScreen%20Shot%202021-02-01%20at%2021.28.11.png?alt=media\&token=35e7f4fc-aa63-41e4-b63d-9828addf7988)
