Pada artikel sebelumnya kita telah belajar apa itu array data dan cara menggunakan array pada bahasa pemrogaman go atau golang. apabila anda belum mengikuti artikel sebelumnya saya sarankan anda untuk membaca artikel sebelumnya tentang Golang – Pengenalan dan cara membuat array. Dan artikel kali ini kita akan belajar tentang tipe data slice dan cara menggunakannya pada bahasa pemrogaman go.
Pengenalan slice
Apa itu slice, slice adalah potongan dari data array. Bisa di bilang jika slice mirip dengan array baik itu dari cara mengakses nya, slice juga memiliki banyak data seperti array yang membedakan nya adalah ukuran slice bisa berubah. Slice dan array selalu terkoneksi, dimana slice adalah data yang mengakseas sebagian atau seluruh data pada array.
Tipe data slice memiliki 3 data, yang pertama adalah pointer, length dan capacity berbeda dengan array yang hanya memiliki length. Kemudian apa itu pointer, pointer adalah penunjuk data pertama di array pada slice. Kemudian ada length, length adalah panjang dari isi slice dan terakhir terdapat capacity, capacity adalah kapasitas dari slice yang mana length tidak boleh lebih dari capacity.
Membuat slice
Untuk membuat slice kita dapat menggunakan beberapa function seperti dibawah ini
Membuat slice | Keterangan |
array[low:high] | Membuat slice dari arraay dimulai dari index low sampai index sebelum high |
array[kow:] | Membuat slice dari array dimulai dari index low sampai index terakhir pada array |
array[:high] | Membuat slice dari array dimulai dari index 0 sampai index sebelum high |
array[:] | Membuat slice dari array dimulai dari index 0 sampai index terakhir pada array |
Kemudian pada slice juga terdapat beberapa function yang dapat digunakan, berikut detailnya
Operasi | Keterangan |
len(slice) | Untuk mendapatkan panjang slice |
cap(skice) | Untuk mendapatkan kapasitas slice |
append(slice, data) | Membuat slice baru dengan menambahkan data pada posisi terakhir slice, jika array penuh maka akan membuat array baru |
make([]string, length, capacity) | Membuat slice baru |
copy(destination, source) | Menyalin slice dari source ke destination |
Setelah mengetahui cara membuat dan function pada slice, selanjutnya mari kita coba membuat slice dari array month yang berisi bulan januari – desember.
package main
import "fmt"
func main() {
var months = [...]string{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December",
}
var slice1 = months[4:7]
fmt.Println("slice1 :", slice1)
fmt.Println("Len slice1 :", len(slice1))
fmt.Println("Cap slice1 :", cap(slice1))
}
Pada code diatas kita telah membuat sebuah array month dan membuat slice dengan nama slice1 kemudian kita juga menampilkan / print isi sile, panjang slice dan kapasitas slice, untuk detailnya perhatikan gambar di bawah

Pada baris 6 kita membuat array dengan nama months
yang berisi 12 data yaitu nama bulan dari januari – desember. Kemudian pada baris 11 kita membuat slice dengan nama slice1
yang beridi data index ke 4 sampai index ke 6 array months
. Kemudian baris 12 kita menampilkan semua data slice, baris ke 13 kita menampilkan panjang slice dan terakhir pada baris ke 14 kita menampilkan kapasitas slice. Jika code diatas dijalankan maka outputnya akan seperti berikut

Pada output diatas menampilkan data slice dari May, June, July karena kita mengambil index ke 4 dan ke 6 pada array, kemudian panjang slice adalah 3 karena pada slice1
memang hanya berisi 3 data, yang terakhir kapasitas slice1
adalah 8 karena kita mengambil data array mulai dari index 4 sehinggan dari index 4 sampai index terakhir array berjumlah 8 data.
Setelah mencoba function len & cap, selanjutnya kita akan mencoba function appand yang dimana appand ini digunakan untuk membuat slice baru dari slice yang sudah ada dan menambahkan data baru pada akhir slice, jika array pada slice nya penuh maka append akan membuat array baru jadi jika kita merubah data pada slice baru maka data pada slice lama tidak akan berubah (kondisi ini hanya terjadi jika array pada slice lama penuh sehingga mengakibatkan slice membuat array baru). Berikut contohnya
package main
import "fmt"
func main() {
var months = [...]string{
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December",
}
var slice2 = months[10:]
fmt.Println("slice2 :", slice2)
var slice3 = append(slice2, "Rendy")
fmt.Println("slice3 :", slice3)
slice3[1] = "Bukan December"
fmt.Println("slice3 :", slice3)
fmt.Println("slice2 :", slice2)
fmt.Println("months :", months)
}
Kali ini setelah membuat array kita membuat slice2
yang dimulai dari index 10 – index terakhir array yaitu 11 maka slice2
hanya akan berisi 2 data dan kita juga membuat slice3
yang mana kita melakukan append dari slice2
dan menambah data baru yaitu “Rendy” pada titik ini array sudah penuh maka slice3
akan membuat array baru, yang mana jika array baru dibuat maka saat kita merubah data dari slice3
maka array months
yang digunakan pada slice2
tidak akan berubah. Detailnya seperti gambar dibawah

Pada baris ke 11 kita membuat slice2
dari array months
yangg dimulai dari index 10 – index terakhir 11 dengan demikian slice2
akan berisi data November & December. Kemudian di baris 14 kita membuat slice3
yang di append dari slice2
dan sekaligus ditambahkan data baru yaitu “Rendy”. Karena pada titik ini array months
sudah tidak dapat menampung data lagi atau sudah full maka slice3
akan membuat array baru untuk menampung data nya.
Dengan demikian saat kita merubah isi data slice3
di baris 16 lebih tepat nya pada index 1 maka data array months
tidak akan ikut berubah karena sebelumnya slice3
sudah membuat array baru. Perhatikan pada output baris 17 nantinya jika data index 1 sudah berubah tetapi saat kita print slice2
dan months
di baris 19 & 20 data nya tidak berubah.

Selanjutnya kita akan mencoba membuat slice dari awal menggunakan function make, sederhana saja jika kita akan membuat slice baru menggunakan make maka kita hanya perlu mengetikkan make([]tipeData, length, capacity)
Lebih detail nya seperti berikut
package main
import "fmt"
func main() {
newSlice := make([]string, 2, 5)
newSlice[0] = "Rendy"
newSlice[1] = "Wijaya"
fmt.Println("newSlice ", newSlice)
fmt.Println("len ", len(newSlice))
fmt.Println("cap :", cap(newSlice))
}
Pada code diatas kita membuat slice baru dengan nama newSlice
dengan tipe data string, panjangnya 2 data dan kapasitas nya 5. Untuk penjelasan detailnya perhatikan gambar di bawah

Pada gambar diatas seperti biasa kita membuat slice pada baris 6 dengan nama newSlice
kemudian pada baris 7 kita merubah data index 0 menjadi “Rendy” dan pada baris 8 kita merubah data index 1 menjadi “Wijaya”. Dan pada baris 10-12 kita melakukan print detail slice, panjang slice dan kapasitas slice.

Terakhir kita akan mencoba meng copy sebuah slice dengan function copy, penggunaan function ini cukup sederhana anda hanya perlu mengetikkan copy(destinationSlice, sourceSlice
package main
import "fmt"
func main() {
newSlice := make([]string, 2, 5)
newSlice[0] = "Rendy"
newSlice[1] = "Wijaya"
fmt.Println("newSlice :", newSlice)
fmt.Println("len :", len(newSlice))
fmt.Println("cap :", cap(newSlice))
copySlice := make([]string, len(newSlice), cap(newSlice))
copy(copySlice, newSlice)
fmt.Println("copySlice :", copySlice)
fmt.Println("len :", len(copySlice))
fmt.Println("cap :", cap(copySlice))
}
Pada code di atas kita membuat slice baru dengan nama copySlice
kemudian kita meng copy newSlice
yang sudah di buat sebelumnya dan di copy ke copySlice

Pada gambar diatas perhatikan baris 14 dimana pada baris tersebut kita membuat slice baru dengan nama copySlice
dan memiliki panjang dan kapasitas yang sama dengan newSlice
yang sudah di buat sebelumnya. Kemudian barulah pada baris 15 kita melakukan copy slice dari newSlice
ke copySlice
dan bisa dilihat pada saat kita melakukan print pada baris 17-19 maka output nya akan sama.

Jadi hati-hati saat membuat array, jika kita ingin membuat array tapi kita salah saat mendeklarasikan nya bisa-bisa yang kita buat bukanlah array tetapi slice.
package main
import "fmt"
func main() {
iniArray := [...]int{1, 2, 3, 4, 5}
iniSlice := []int{1, 2, 3, 4, 5}
fmt.Println("Ini array :", iniArray)
fmt.Println("Ini slice :", iniSlice)
}
Saat membuat array kita wajib mengisikan panjang array nya di dalam kurun [Isi panjang array di dalam kurung]
jika kita tidak yakin atau belum mengetahui panjang array yang akan di buat kita bisa menggunakan titik tiga di dalam kurung seperti [...]
. Dan jika kita lupa atau tidak mengisikan panjang data di dalam kurung maka yan kita buat adalah slice.

Penutup
Pada artikel kali ini kita telah belajar cara membuat slice pada bahasa pemrogaman golang. Dan pada artikel selanjutnya saya akan membahas Tipe data map pada golang.