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).
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
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
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
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
.
delete(m, key)
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:

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

Bagaimana jika kita ingin menghasilkan seluruh elemen slice yang bertipe map? kita daoat menggunakan looping for
- range
:
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"])
}
}

Last updated
Was this helpful?