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).
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"])
}
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:
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"])
}
Inisialisasi Nilai map
Kita juga bisa langsung memasukkan nilai pada variabel bertipe map dengan menggunakan literal {} seperti berikut ini:
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"])
}
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.
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)
}
}
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:
m[key] = elem
Kita lihat bahwa kita harus mengetahui key dari map dan meng-assign nilai ke dalam map .
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"])
}
Retrieve the element
Kita dapat menyimpan value dari key pada map dengan cara seperti berikut ini:
elem = m[key]
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)
}
Delete elemen pada map
Kita juga dapat menghapus elemen pada map menggunakan function built-in delete .
Dari kode di atas kita lihat bahwa kita menghapus elemen map pada keyadorable sehingga jika kita akses key dari adorable dan isi dari map batch maka akan menghasilkan output seperti berikut ini:
Deteksi Keberadaan Item Dengan Key Tertentu
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]
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")
}
}
Slice of Map
Kita dapat menggunakan slice of map atau kombinasi antara slice dan map.