#14: Tipe Data Slice - Belajar Golang Dari Dasar

By Rizky Kurniawan - July 2, 2022 ~4 mins read
Artikel ini merupakan bagian dari seri Belajar Golang Dari Dasar

Tipe Data Slice

Slice merupakan sebuah tipe data yang agak rumit. Tipe data slice jarang ditemui dalam bahasa pemrograman lainnya. Slice merupakan potongan dari data array. Slice sendiri sangat mirip dengan tipe data array, namun tidak seperti array yang panjangnya tidak dapat berubah, panjang data slice dapat berubah. Slice adalah data yang mengakses sebagian atau seluruh data array. Oleh karena itu, data slice selalu terhubung dengan data array.

Karena data slice terhubung dengan array, maka kamu harus berhati-hati ketika ingin melakukan perubahan. Perubahan yang kamu lakukan pada array akan merubah data pada slice yang terhubung dengannya. Perubahan data pada slice akan merubah data array dan slice lain yang terhubung dengan array.

Slice memiliki tiga buah data yaitu pointer (sebuah penunjuk data pertama pada array), length (panjang data slice, tidak boleh lebih dari capacity), dan capacity (kapasitas dari slice).

Membuat Slice

Ada beberapa cara yang bisa kita gunakan untuk membuat data slice. Perhatikan tabel berikut ini:

Cara Keterangan
array[low:high] Membuat slice dimulai dari index low hingga sebelum index high
array[low:] Membuat slice dimulai dari index low hingga index terakhir dari array
array[:high] Membuat slice dimulai dari index 0 hingga index high
array[:] Membuat slice dimulai dari index 0 hingga index terakhir dari array

Fungsi Pada Slice

Ada beberapa fungsi yang dapat digunakan untuk memanipulasi slice antara lain sebagai berikut:

Fungsi Keterangan
len(slice) Mendapatkan panjang slice
cap(slice) Mendapatkan kapasitas slice
append(slice, data) Membuat slice baru dengan menambah data ke posisi terakhir slice. Jika kapasitas penuh, maka akan otomatis membuat array baru
make([]TypeData, length, capacity) Membuat slice baru
copy(destination, source) Menyalin slice dari source ke destination

Ilustrasi Slice

Golang Slice

Dari ilustrasi di atas, terdapat array yang berisi nama buah. Kemudian kita membuat slice dengan array[2:5] yang berarti dimulai dari index 2 hingga sebelum index 5. Maka, data yang ada pada slice adalah Melon, Semangka, dan Jeruk.

Slice yang kita buat memiliki pointer dengan nilai 2 karena dimulai dari index ke 2. Length 3 yaitu jumlah data yang kita dapatkan (index 2, 3, dan 4). Capacity 5 dihitung dari pointer hingga index terakhir array.

Contoh Kode

package main

import "fmt"

func main() {
	var fruits = [...]string{
		"Apel",
		"Nanas",
		"Melon",
		"Semangka",
		"Jeruk",
		"Pepaya",
		"Anggur",
	}

	var slice = fruits[2:5]
	fmt.Println(slice)
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}

output:

[Melon Semangka Jeruk]
3
5

Append

Append adalah cara membuat slice dengan menambah data ke posisi terakhir slice. Jika kapasitas penuh, maka akan otomatis membuat array baru. Sebagai contoh, perhatikan kode berikut ini:

package main

import "fmt"

func main() {
	chars := [...]string{"A", "B", "C", "D", "E", "F"}

	charSlice1 := chars[4:]
	fmt.Println(chars)      // [A B C D E F]
	fmt.Println(charSlice1) //[E F]

	charSlice2 := append(charSlice1, "G")
	charSlice2[0] = "E lagi"
	fmt.Println(charSlice2) // [E lagi F G]
	fmt.Println(chars)      // [A B C D E F]
}

output:

[A B C D E F]
[E F]
[E lagi F G]
[A B C D E F]

Variabel charSlice1 memiliki kapasitas 2 dan sudah penuh, sehingga ketika kita melakukan append dan menambahkan huruf G maka akan dibuat array baru. Hal ini bisa dibuktikan dengan mencoba merubah data pada charSlice2, setelah dilakukan Println variabel chars tidak berubah. Berarti referensi charSlice2 bukan lagi array chars yang lama melainkan array yang baru dibuat karena kapasitas charSlice1 sudah penuh.

Make

Fungsi make digunakan untuk membuat slice dari awal tanpa menggunakan array yang sudah ada sebelumnya. Sebagai contoh, perhatikan kode berikut ini:

package main

import "fmt"

func main() {
	days := make([]string, 2, 6)
	days[0] = "Senin"
	days[1] = "Selasa"

	fmt.Println(days)
	fmt.Println(len(days))
	fmt.Println(cap(days))
}

output:

[Senin Selasa]
2
6

Copy

Fungsi copy digunakan untuk membuat salinan dari slice yang sudah ada. Sebagai contoh, perhatikan kode berikut ini:

package main

import "fmt"

func main() {
	days := make([]string, 2, 6)
	days[0] = "Senin"
	days[1] = "Selasa"
	fmt.Println(days)

	copyDays := make([]string, len(days), cap(days))
	copy(days, copyDays)
	fmt.Println(copyDays)
}

output:

[Senin Selasa]
[Senin Selasa]

Untuk melakukan copy pastikan ukuran slice destination sama agar data tidak terpotong.

Berikutnya: #15 Tipe Data Map - Belajar Golang Dari Dasar

Tags: #golang
Bagikan:

Ingin Berdiskusi?

Yuk bergabung di Grup Telegram Ruang Developer atau mulai diskusi melalui GitHub. See You!

Dapatkan contoh source code project backend, frontend, atau fullstack untuk kamu amati, tiru, dan modifikasi sesuka hati. Klik untuk melihat detail!
comments powered by Disqus

Berlangganan Gratis

Kamu akan menerima email update dari Ruang Developer

Beri Dukungan

Beri dukungan, dapatkan full source code project web untuk bahan referensi, tiru, dan modifikasi.
Lightbox