Table of Contents

04 – Array, Slice, & Map

Array

Array adalah kumpulan data bertipe sama, yang disimpan dalam sebuah variabel. Array memiliki kapasitas yang nilainya ditentukan pada saat pembuatan, menjadikan elemen/data yang disimpan di array tersebut jumlahnya tidak boleh melebihi yang sudah dialokasikan.

Default nilai tiap elemen array pada awalnya tergantung dari tipe datanya. Jika int maka tiap element zero value-nya adalah 0, jika bool maka false, dan seterusnya. Setiap elemen array memiliki indeks berupa angka yang merepresentasikan posisi urutan elemen tersebut. Indeks array dimulai dari 0.

Contoh penerapan array :

				
					var names [4]string
names[0] = "trafalgar"
names[1] = "d"
names[2] = "water"
names[3] = "law"

fmt.Println(names[0], names[1], names[2], names[3])
				
			

Variabel names dideklarasikan sebagai array string dengan alokasi elemen 4 slot. Cara mengisi slot elemen array bisa dilihat di kode di atas, yaitu dengan langsung mengakses elemen menggunakan indeks, lalu mengisinya.

Error Array yang Melebihi Alokasi Awal

Pengisian elemen array pada indeks yang tidak sesuai dengan alokasi menghasilkan error. Contoh sederhana, jika array memiliki 4 slot, maka pengisian nilai slot 5 seterusnya adalah tidak valid.

				
					var names [4]string
names[0] = "trafalgar"
names[1] = "d"
names[2] = "water"
names[3] = "law"
names[4] = "ez" // baris kode ini menghasilkan error
				
			
Inisialisasi Nilai Awal Array

Pengisian elemen array bisa dilakukan pada saat deklarasi variabel. Caranya dengan menuliskan data elemen dalam kurung kurawal setelah tipe data, dengan pembatas antar elemen adalah tanda koma (,).

				
					var fruits = [4]string{"apple", "grape", "banana", "melon"}

fmt.Println("Jumlah element \t\t", len(fruits))
fmt.Println("Isi semua element \t", fruits)
				
			

Fungsi len() dipakai untuk menghitung jumlah elemen sebuah array.

Penggunaan fungsi fmt.Println() pada data array tanpa mengakses indeks tertentu, akan menghasilkan output dalam bentuk string dari semua array yang ada. Teknik ini biasa digunakan untuk debugging data array. 

Inisialisasi Nilai Awal Array Tanpa Jumlah Elemen

Deklarasi array yang nilainya diset di awal, boleh tidak dituliskan jumlah lebar array-nya, cukup ganti dengan tanda 3 titik (). Jumlah elemen akan di kalkulasi secara otomatis menyesuaikan data elemen yang diisikan.

				
					var numbers = [...]int{2, 3, 2, 4, 3}

fmt.Println("data array \t:", numbers)
fmt.Println("jumlah elemen \t:", len(numbers))
				
			

Variabel numbers akan secara otomatis memiliki jumlah elemen 5, karena pada saat deklarasi disiapkan 5 buah elemen.

Array Multidimensi

Array multidimensi adalah array yang tiap elemennya juga berupa array (dan bisa seterusnya, tergantung ke dalaman dimensinya).

Cara deklarasi array multidimensi secara umum sama dengan cara deklarasi array biasa, dengan cara menuliskan data array dimensi selanjutnya sebagai elemen array dimensi sebelumnya.

Khusus untuk array yang merupakan sub dimensi atau elemen, boleh tidak dituliskan jumlah datanya. Contohnya bisa dilihat pada deklarasi variabel numbers2 di kode berikut.

				
					var numbers1 = [2][3]int{[3]int{3, 2, 3}, [3]int{3, 4, 5}}
var numbers2 = [2][3]int{{3, 2, 3}, {3, 4, 5}}

fmt.Println("numbers1", numbers1)
fmt.Println("numbers2", numbers2)
				
			

Kedua array di atas memiliki jumlah elemen yang sama.

Perulangan Elemen Array Menggunakan Keyword for

Keyword for dan array memiliki hubungan yang sangat erat. Dengan memanfaatkan perulangan menggunakan keyword ini, elemen-elemen dalam array bisa didapat.

Ada beberapa cara yang bisa digunakan untuk me-looping data array, yg pertama adalah dengan memanfaatkan variabel iterasi perulangan untuk mengakses elemen berdasarkan indeks-nya. Contoh :

				
					var fruits = [4]string{"apple", "grape", "banana", "melon"}

for i := 0; i < len(fruits); i++ {
    fmt.Printf("elemen %d : %s\n", i, fruits[i])
}
				
			

Perulangan di atas dijalankan sebanyak jumlah elemen array fruits (bisa diketahui dari kondisi i < len(fruits). Di tiap perulangan, elemen array diakses lewat variabel iterasi i

Penggunaan Variabel Underscore _ Dalam for - range

Kadang kala ketika looping menggunakan for – range, ada kemungkinan di mana data yang dibutuhkan adalah elemen-nya saja, indeks-nya tidak. Sedangkan kode di atas, range mengembalikan 2 data, yaitu indeks dan elemen.

Seperti yang sudah diketahui, bahwa di Go tidak memperbolehkan adanya variabel yang menganggur atau tidak dipakai. Jika dipaksakan, error akan muncul.

Di sinilah salah satu kegunaan variabel pengangguran, atau underscore (_). Tampung saja nilai yang tidak ingin digunakan ke underscore.

				
					var fruits = [4]string{"apple", "grape", "banana", "melon"}

for _, fruit := range fruits {
    fmt.Printf("nama buah : %s\n", fruit)
}
				
			

Pada kode di atas, yang sebelumnya adalah variabel i diganti dengan _, karena kebetulan variabel i tidak digunakan.

Sebaliknya jika yang dibutuhkan hanya indeks elemen-nya saja, bisa gunakan 1 buah variabel setelah keyword for.

				
					for i, _ := range fruits { }
// atau
for i := range fruits { }
				
			
Alokasi Elemen Array Menggunakan Keyword make

Deklarasi sekaligus alokasi data array juga bisa dilakukan lewat keyword make.

				
					var fruits = make([]string, 2)
fruits[0] = "apple"
fruits[1] = "manggo"

fmt.Println(fruits)
				
			

Parameter pertama keyword make diisi dengan tipe data elemen array yang diinginkan, parameter kedua adalah jumlah elemennya. Pada kode di atas, variabel fruits tercetak sebagai array string dengan alokasi 2 slot.

Slice

Array ada gunanya, namun tidak fleksibel, sehingga kita jarang melihatnya dalam kode Go. Slice, ada di mana saja. Slice dibentuk dari array untuk menyediakan kemudahan dan kekuatan yang lebih.

Slice adalah reference elemen array. Slice bisa dibuat, atau bisa juga dihasilkan dari manipulasi sebuah array ataupun slice lainnya. Karena merupakan data reference, menjadikan perubahan data di tiap elemen slice akan berdampak pada slice lain yang memiliki alamat memori yang sama.

Inisialisasi Slice

Cara pembuatan slice mirip seperti pembuatan array, bedanya tidak perlu mendefinisikan jumlah elemen ketika awal deklarasi. Pengaksesan nilai elemen-nya juga sama. Contoh pembuatan slice:

				
					var fruits = []string{"apple", "grape", "banana", "melon"}
fmt.Println(fruits[0]) // "apple"
				
			

Salah satu perbedaan slice dan array bisa diketahui pada saat deklarasi variabel-nya, jika jumlah elemen tidak dituliskan, maka variabel tersebut adalah slice.

				
					var fruitsA = []string{"apple", "grape"}      // slice
var fruitsB = [2]string{"banana", "melon"}    // array
var fruitsC = [...]string{"papaya", "grape"}  // array
				
			
Hubungan Slice Dengan Array & Operasi Slice

Kalau perbedannya hanya di penentuan alokasi pada saat inisialisasi, kenapa tidak menggunakan satu istilah saja? atau adakah perbedaan lainnya?

Sebenarnya slice dan array tidak bisa dibedakan karena merupakan sebuah kesatuan. Array adalah kumpulan nilai atau elemen, sedang slice adalah referensi tiap elemen tersebut.

Slice bisa dibentuk dari array yang sudah didefinisikan, caranya dengan memanfaatkan teknik 2 index untuk mengambil elemen-nya. Contoh bisa dilihat pada kode berikut.

				
					var fruits = []string{"apple", "grape", "banana", "melon"}
var newFruits = fruits[0:2]

fmt.Println(newFruits) // ["apple", "grape"]
				
			

Kode fruits[0:2] maksudnya adalah pengaksesan elemen dalam slice fruits yang dimulai dari indeks ke-0, hingga elemen sebelum indeks ke-2. Elemen yang memenuhi kriteria tersebut akan didapat, untuk kemudian disimpan pada variabel lain sebagai slice baru. Pada contoh di atas, newFruits adalah slice baru yang tercetak dari slice fruits, dengan isi 2 elemen, yaitu “apple” dan “grape”.

Ketika mengakses elemen array menggunakan satu buah indeks (seperti data[2]), nilai yang didapat merupakan hasil copy dari referensi aslinya. Berbeda dengan pengaksesan elemen menggunakan 2 indeks (seperti data[0:2]), nilai yang didapat adalah reference elemen atau slice.

Slice Merupakan Tipe Data Reference

Slice merupakan tipe data reference atau referensi. Artinya jika ada slice baru yang terbentuk dari slice lama, maka data elemen slice yang baru akan memiliki alamat memori yang sama dengan elemen slice lama. Setiap perubahan yang terjadi di elemen slice baru, akan berdampak juga pada elemen slice lama yang memiliki referensi yang sama.

Program berikut merupakan pembuktian tentang teori yang baru kita bahas. Kita akan mencoba mengubah data elemen slice baru, yang terbentuk dari slice lama.

				
					var fruits = []string{"apple", "grape", "banana", "melon"}

var aFruits = fruits[0:3]
var bFruits = fruits[1:4]

var aaFruits = aFruits[1:2]
var baFruits = bFruits[0:1]

fmt.Println(fruits)   // [apple grape banana melon]
fmt.Println(aFruits)  // [apple grape banana]
fmt.Println(bFruits)  // [grape banana melon]
fmt.Println(aaFruits) // [grape]
fmt.Println(baFruits) // [grape]

// Buah "grape" diubah menjadi "pinnaple"
baFruits[0] = "pinnaple"

fmt.Println(fruits)   // [apple pinnaple banana melon]
fmt.Println(aFruits)  // [apple pinnaple banana]
fmt.Println(bFruits)  // [pinnaple banana melon]
fmt.Println(aaFruits) // [pinnaple]
fmt.Println(baFruits) // [pinnaple]
				
			

Sekilas bisa kita lihat bahwa setelah slice yang isi datanya adalah grape di-ubah menjadi pinnaple, semua slice pada 4 variabel lainnya juga ikut berubah.

Variabel aFruits, bFruits merupakan slice baru yang terbentuk dari variabel fruits. Dengan menggunakan dua slice baru tersebut, diciptakan lagi slice lainnya, yaitu aaFruits, dan baFruits. Kelima slice tersebut ditampilkan nilainya.

Selanjutnya, nilai dari baFruits[0] diubah, dan 5 slice tadi ditampilkan lagi. Hasilnya akan ada banyak slice yang elemennya ikut berubah. Yaitu elemen-elemen yang referensi-nya sama dengan referensi elemen baFruits[0].

Simulasi di atas diharapkan bisa mereprentasikan apa itu reference.
Fungsi len() & cap()

Fungsi len() digunakan untuk menghitung jumlah elemen slice yang ada. Sebagai contoh jika sebuah variabel adalah slice dengan data 4 buah, maka fungsi ini pada variabel tersebut akan mengembalikan angka 4.

				
					var fruits = []string{"apple", "grape", "banana", "melon"}
fmt.Println(len(fruits)) // 4
				
			

Fungsi cap() digunakan untuk menghitung lebar atau kapasitas maksimum slice. Nilai kembalian fungsi ini untuk slice yang baru dibuat pasti sama dengan len, tapi bisa berubah seiring operasi slice yang dilakukan. Agar lebih jelas, silakan disimak kode berikut.

				
					var fruits = []string{"apple", "grape", "banana", "melon"}
fmt.Println(len(fruits))  // len: 4
fmt.Println(cap(fruits))  // cap: 4

var aFruits = fruits[0:3]
fmt.Println(len(aFruits)) // len: 3
fmt.Println(cap(aFruits)) // cap: 4

var bFruits = fruits[1:4]
fmt.Println(len(bFruits)) // len: 3
fmt.Println(cap(bFruits)) // cap: 3
				
			

Variabel fruits disiapkan di awal dengan jumlah elemen 4, fungsi len(fruits) dan cap(fruits) pasti hasinya 4.

Variabel aFruits dan bFruits merupakan slice baru berisikan 3 buah elemen milik slice fruits. Variabel aFruits mengambil elemen index 0, 1, 2; sedangkan bFruits 1, 2, 3.

Fungsi len() menghasilkan angka 3, karena jumlah elemen kedua slice ini adalah 3. Tetapi cap(aFruits) menghasilkan angka yang berbeda, yaitu 4 untuk aFruits dan 3 untuk bFruits. kenapa? jawabannya bisa dilihat pada tabel berikut.

KodeOutputlen()cap()
fruits[0:4][buah buah buah buah]44
aFruits[0:3][buah buah buah ----]34
bFruits[1:4]---- [buah buah buah]33

Kita analogikan slicing 2 index menggunakan x dan y.

fruits[x:y]

Slicing yang dimulai dari indeks 0 hingga y akan mengembalikan elemen-elemen mulai indeks 0 hingga sebelum indeks y, dengan lebar kapasitas adalah sama dengan slice aslinya.

Sedangkan slicing yang dimulai dari indeks x, yang di mana nilai x adalah lebih dari 0, membuat elemen ke-x slice yang diambil menjadi elemen ke-0 slice baru. Hal inilah yang membuat kapasitas slice berubah.

Fungsi append()

Fungsi append() digunakan untuk menambahkan elemen pada slice. Elemen baru tersebut diposisikan setelah indeks paling akhir. Nilai balik fungsi ini adalah slice yang sudah ditambahkan nilai barunya. Contoh penggunaannya bisa dilihat di kode berikut.

				
					var fruits = []string{"apple", "grape", "banana"}
var cFruits = append(fruits, "papaya")

fmt.Println(fruits)  // ["apple", "grape", "banana"]
fmt.Println(cFruits) // ["apple", "grape", "banana", "papaya"]
				
			

Ada 3 hal yang perlu diketahui dalam penggunaan fungsi ini.

  1. Ketika jumlah elemen dan lebar kapasitas adalah sama (len(fruits) == cap(fruits)), maka elemen baru hasil append() merupakan referensi baru.
  2. Ketika jumlah elemen lebih kecil dibanding kapasitas (len(fruits) < cap(fruits)), elemen baru tersebut ditempatkan ke dalam cakupan kapasitas, menjadikan semua elemen slice lain yang referensi-nya sama akan berubah nilainya.

Agar lebih jelas silakan perhatikan contoh berikut.

				
					var fruits = []string{"apple", "grape", "banana"}
var bFruits = fruits[0:2]

fmt.Println(cap(bFruits)) // 3
fmt.Println(len(bFruits)) // 2

fmt.Println(fruits)  // ["apple", "grape", "banana"]
fmt.Println(bFruits) // ["apple", "grape"]

var cFruits = append(bFruits, "papaya")

fmt.Println(fruits)  // ["apple", "grape", "papaya"]
fmt.Println(bFruits) // ["apple", "grape"]
fmt.Println(cFruits) // ["apple", "grape", "papaya"]
				
			

Pada contoh di atas bisa dilihat,

  1. Elemen indeks ke-2 slice fruits nilainya berubah setelah ada penggunaan keyword append() pada bFruits.
  2. Slice bFruits kapasitasnya adalah 3 sedang jumlah datanya hanya 2.
  3. Karena len(bFruits) < cap(bFruits), maka elemen baru yang dihasilkan, terdeteksi sebagai perubahan nilai pada referensi yang lama (referensi elemen indeks ke-2 slice fruits), membuat elemen yang referensinya sama, nilainya berubah.
Fungsi copy()

Fungsi copy() digunakan untuk men-copy elements slice pada src (parameter ke-2), ke dst (parameter pertama).

Jumlah element yang di-copy dari src adalah sejumlah lebar slice dst (atau len(dst)). Jika jumlah slice pada src lebih kecil dari dst, maka akan ter-copy semua. Lebih jelasnya silakan perhatikan contoh berikut.

				
					dst := make([]string, 3)
src := []string{"watermelon", "pinnaple", "apple", "orange"}
n := copy(dst, src)

fmt.Println(dst) // watermelon pinnaple apple
fmt.Println(src) // watermelon pinnaple apple orange
fmt.Println(n)   // 3
				
			
  1. Pada kode di atas variabel slice dst dipersiapkan dengan lebar adalah 3 elements.
  2. Slice src yang isinya 4 elements, di-copy ke dst. Menjadikan isi slice dst sekarang adalah 3 buah elements yang sama dengan 3 buah elements src, hasil dari operasi copy().
  3. Yang ter-copy hanya 3 buah (meski src memiliki 4 elements) hal ini karena copy() hanya meng-copy elements sebanyak len(dst).

Pada contoh kedua berikut, dst merupakan slice yang sudah ada isinya, 3 buah elements. Variabel src yang juga merupakan slice dengan isi dua elements, di-copy ke dst. Karena operasi copy() akan meng-copy sejumlah len(dst), maka semua elements src akan ter-copy karena jumlahnya di bawah atau sama dengan lebar dst.

				
					dst := []string{"potato", "potato", "potato"}
src := []string{"watermelon", "pinnaple"}
n := copy(dst, src)

fmt.Println(dst) // watermelon pinnaple potato
fmt.Println(src) // watermelon pinnaple
fmt.Println(n)   // 2
				
			
  1. Isi dst masih tetap 3 elements, tapi dua elements pertama adalah sama dengan src.
  2. Element terakhir dst isinya tidak berubah, tetap potato, hal ini karena proses copy hanya memutasi element ke-1 dan ke-2 milik dst, karena memang pada src hanya dua itu elements-nya.
Pengaksesan Elemen Slice Dengan 3 Indeks

3 index adalah teknik slicing elemen yang sekaligus menentukan kapasitasnya. Cara menggunakannnya yaitu dengan menyisipkan angka kapasitas di belakang, seperti fruits[0:1:1]. Angka kapasitas yang diisikan tidak boleh melebihi kapasitas slice yang akan di slicing.

Berikut merupakan contoh penerapannya.

				
					var fruits = []string{"apple", "grape", "banana"}
var aFruits = fruits[0:2]
var bFruits = fruits[0:2:2]

fmt.Println(fruits)      // ["apple", "grape", "banana"]
fmt.Println(len(fruits)) // len: 3
fmt.Println(cap(fruits)) // cap: 3

fmt.Println(aFruits)      // ["apple", "grape"]
fmt.Println(len(aFruits)) // len: 2
fmt.Println(cap(aFruits)) // cap: 3

fmt.Println(bFruits)      // ["apple", "grape"]
fmt.Println(len(bFruits)) // len: 2
fmt.Println(cap(bFruits)) // cap: 2
				
			
Map

Map adalah tipe data asosiatif yang ada di Go, berbentuk key-value pair. Untuk setiap data (atau value) yang disimpan, disiapkan juga key-nya. Key harus unik, karena digunakan sebagai penanda (atau identifier) untuk pengaksesan value yang bersangkutan.

Mirip seperti slice, hanya saja indeks yang digunakan untuk pengaksesan bisa ditentukan sendiri tipe-nya (indeks tersebut adalah key).

Penggunaan Map

Cara menggunakan map cukup dengan menuliskan keyword map diikuti tipe data key dan value-nya. Agar lebih mudah dipahami, silakan perhatikan contoh di bawah ini.

				
					var chicken map[string]int
chicken = map[string]int{}

chicken["januari"] = 50
chicken["februari"] = 40

fmt.Println("januari", chicken["januari"]) // januari 50
fmt.Println("mei",     chicken["mei"])     // mei 0
				
			
  1. Variabel chicken dideklarasikan sebagai map, dengan tipe data key adalah string dan value-nya int. Dari kode tersebut bisa dilihat bagaimana cara penggunaan keyword map.
  2. Kode map[string]int maknanya adalah, tipe data map dengan key bertipe string dan value bertipe int.
  3. Default nilai variabel map adalah nil. Oleh karena itu perlu dilakukan inisialisasi nilai default di awal, caranya cukup dengan tambahkan kurung kurawal pada akhir tipe, contoh seperti pada kode di atas: map[string]int{}.

Cara menge-set nilai pada sebuah map adalah dengan menuliskan variabel-nya, kemudian disisipkan key pada kurung siku variabel (mirip seperti cara pengaksesan elemen slice), lalu isi nilainya. Contohnya seperti chicken[“februari”] = 40. Sedangkan cara pengambilan value adalah cukup dengan menyisipkan key pada kurung siku variabel.

Pengisian data pada map bersifat overwrite, ketika variabel sudah memiliki item dengan key yang sama, maka value lama akan ditimpa dengan value baru.

Pada pengaksesan item menggunakan key yang belum tersimpan di map, akan dikembalikan nilai default tipe data value-nya. Contohnya seperti pada kode di atas, chicken[“mei”] menghasilkan nilai 0 (nilai default tipe int), karena belum ada item yang tersimpan menggunakan key “mei”.

Inisialisasi Nilai Map

Zero value dari map adalah nil, maka tiap variabel bertipe map harus di-inisialisasi secara explisit nilai awalnya (agar tidak nil).

				
					var data map[string]int
data["one"] = 1
// akan muncul error!

data = map[string]int{}
data["one"] = 1
// tidak ada error
				
			

Nilai variabel bertipe map bisa didefinisikan di awal, caranya dengan menambahkan kurung kurawal setelah tipe data, lalu menuliskan key dan value di dalamnya. Cara ini sekilas mirip dengan definisi nilai array/slice namun dalam bentuk key-value.

				
					// cara horizontal
var chicken1 = map[string]int{"januari": 50, "februari": 40}

// cara vertical
var chicken2 = map[string]int{
    "januari":  50,
    "februari": 40,
}
				
			

Key dan value dituliskan dengan pembatas tanda titik dua (:). Sedangkan tiap itemnya dituliskan dengan pembatas tanda koma (,). Khusus deklarasi dengan gaya vertikal, tanda koma perlu dituliskan setelah item terakhir.

Variabel map bisa di-inisialisasi dengan tanpa nilai awal, caranya menggunakan tanda kurung kurawal, contoh: map[string]int{}. Atau bisa juga dengan menggunakan keyword make dan new. Contohnya bisa dilihat pada kode berikut. Ketiga cara di bawah ini intinya adalah sama.

				
					var chicken3 = map[string]int{}
var chicken4 = make(map[string]int)
var chicken5 = *new(map[string]int)
				
			

Khusus inisialisasi data menggunakan keyword new, yang dihasilkan adalah data pointer. Untuk mengambil nilai aslinya bisa dengan menggunakan tanda asterisk (*).

Iterasi Item Map Menggunakan for - range

Item variabel map bisa di iterasi menggunakan for – range. Cara penerapannya masih sama seperti pada slice, pembedanya data yang dikembalikan di tiap perulangan adalah key dan value, bukan indeks dan elemen. Contohnya bisa dilihat pada kode berikut.

				
					var chicken = map[string]int{
    "januari":  50,
    "februari": 40,
    "maret":    34,
    "april":    67,
}

for key, val := range chicken {
    fmt.Println(key, "  \t:", val)
}
				
			
Menghapus Item Map

Fungsi delete() digunakan untuk menghapus item dengan key tertentu pada variabel map. Cara penggunaannya, dengan memasukan objek map dan key item yang ingin dihapus sebagai parameter.

				
					var chicken = map[string]int{"januari": 50, "februari": 40}

fmt.Println(len(chicken)) // 2
fmt.Println(chicken)

delete(chicken, "januari")

fmt.Println(len(chicken)) // 1
fmt.Println(chicken)
				
			

Item yang memiliki key “januari” dalam variabel chicken akan dihapus.

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. Return value ke-2 ini adalah opsional, isinya nilai bool yang menunjukkan ada atau tidaknya item yang dicari.

				
					var chicken = map[string]int{"januari": 50, "februari": 40}
var value, isExist = chicken["januari"]

if isExist {
    fmt.Println(value)
} else {
    fmt.Println("item is not exists")
}
				
			
Kombinasi Slice & Map

Slice dan map bisa dikombinasikan, dan sering digunakan pada banyak kasus, contohnya seperti data array yang berisikan informasi siswa, dan banyak lainnya.

Cara menggunakannya cukup mudah, contohnya seperti []map[string]int, artinya slice yang tipe tiap elemen-nya adalah map[string]int.

Agar lebih jelas, silakan praktekan contoh berikut.

				
					var chickens = []map[string]string{
	{"name": "chicken blue", "gender": "male"},
	{"name": "chicken red", "gender": "male"},
	{"name": "chicken yellow", "gender": "female"},
}

for _, chicken := range chickens {
	fmt.Println(chicken["gender"], chicken["name"])
}
				
			

Dalam []map[string]string, tiap elemen bisa saja memiliki key yang berbeda-beda, sebagai contoh seperti kode berikut.

				
					var data = []map[string]string{
    {"name": "chicken blue", "gender": "male", "color": "brown"},
    {"address": "mangga street", "id": "k001"},
    {"community": "chicken lovers"},
}