Golang Bagian 13

Slice

Neraka ngoding
Neraka Ngoding
15 min readMar 25, 2020

--

OOT dikit gan. Hari ini tanggal 20 maret 2020 berita tentang covid-19 hampir setiap saat hampir dimana-mana, yang konon katanya belum mencapai puncaknya di Indonesia. Total kasus 309, meninggal 25, dan 15 sembuh. Harga dolar mencapai 16 ribu versi Google paling lemah se-Asia, saham-saham pada anjlok. Fatality Rate Indonesia paling tinggi didunia. Pekerja seperti saya sudah mulai banyak yang #WFH (work from home), tetapi karena saya kerja diperbankan rada sulit untuk WFH untuk melayani masyarakat dibidang keuangan, bank harus tetap beroperasi dengan waspada karena ekonomi indonesia harus tetap berlangsung “the show must go on”. Semoga wabah covid-19 cepat berlalu dan tidak kembali lagi sejenisnya aminnnnnn. Ayo kawan-kawan coder Indonesia harus bangkit menggerakan ekonomi Indonesia, kalau bisa Indonesia menjadi mekahnya coder dunia, kenapa tidak? sehingga bila terjadi wabah seperti covid-19 ekonomi kita kuat. Aminnn ayo kita oprek lagi Golang sikaatttttttttt.

Okayyyy kali ini kita akan bahas tentang Slice yang menurut saya salah satu bagian menarik dari Golang.

“Slice adalah tipe data built-in atau bawaan Golang untuk merepresentasikan kumpulan data seperti Array tetapi lebih fleksibel dan powerfull. Slice memang diimplementasikan secara internal menggunakan Array.”

Struktur Slice seperti gambar 1 dibawah.

Gambar 1.

Komponen Slice terbagi menjadi 3 bagian yaitu :

  • Pointer (Pointer akan saya bahas diblog kedepan, singkatnya pointer adalah penunjuk ke memory address yang lain) fungsinya adalah untuk menunjuk Array yang digunakan, jadi sebenarnya Slice itu mekanisme internalnya menggunakan Array. Pada gambar diatas adalah Array Integer dengan panjang 10, kalau dinyatakan dengan bahasa Golang seperti dibawah
x:=[10]int{0,1,2,3,4,5,6,7,8,9}
  • Len adalah panjang anggota slice yaitu 6. Pada gambar 1 diatas jumlah yang berwarna merah yaitu 6.
  • Cap adalah kapasitas atau jumlah maksimum anggota Slice. Pada gambar 1 adalah jumlah warna merah dan kuning yaitu 8.

Jadi bicara Slice tidak terlepas dari Array atau bisa dikatakan Slice adalah fragment atau bagian dari Array.

Deklarasi Slice

Berikut adalah beberapa cara deklarasi Slice :

  1. Slice kosong.

Programnya bisa dicoba disini.

Program 1.

Penjelasan program 1:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan tipe anggota Integer.
  • Baris 11 deklarasi Slice y dengan tipe anggota String.
  • Baris 13 print tipe data x dengan %T yaitu Slice Integer.
  • Baris 15 print tipe data y dengan %T yaitu Slice String.

Output :

Type x = []int
Type y = []string

2. Deklarasi Slice dengan New.

Programnya bisa dicoba disini.

Program 2.

Penjelasan Program 2 :

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi slice s dengan panjang 5 dengan kapasitas 10 dengan anggota nilai default Integer menggunakan New.
  • Baris 11 print Slice s (%v untuk format string tipe data Array dan Slice), len dan cap .

Ouput :

s = [0 0 0 0 0], len = 5, cap = 10

3. Deklarasi Slice dengan Literal

Literal adalah nilai tetap. Programnya bisa dicoba disini

Program 3

Penjelasan program 3:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan Literal atau dengan kata lain deklarasi langsung dengan inisialisasi data anggotanya, dengan panjang 10 kapasitas 10 anggotanya 1,2,3,4,5,6,7,8,9,10.. Deklarasi nya mirip dengan Array cuman [] tidak ada angkanya.
  • Baris 11 print Slice x (%v untuk format string tipe data Array dan Slice), len/panjang, dan cap/kapasitas .

Output :

x = [1 2 3 4 5 6 7 8 9 10], len = 10, cap = 10

4. Deklarasi Slice dari Array.

Berikut adalah beberapa cara deklarasi Slice dari Array. Programnya bisa dicoba disini

Program 4.

Penjelasan program 4:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Array x dengan Literal dengan panjang 10 dengan anggotanya 1,2,3,4,5,6,7,8,9,10.
  • Baris 11 deklarasi Slice s : x[1:5] artinya buat Slice dari Array x dimulai dari index 1 Array x sepanjang (5–1) dengan kapasitas (panjang array x =10— 1 = 9).
  • Baris 11 print Slice s (%v untuk format string tipe data Array dan Slice), len dan cap .

Output :

s = [2 3 4 5], len = 4, cap = 9

Contoh lain membuat Slice dari Array bisa dicoba disini.

Program 5.

Penjelasan program 5:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Array x dengan Literal dengan panjang 10 dengan anggotanya 1,2,3,4,5,6,7,8,9,10.
  • Baris 11 deklarasi Slice s : x[:5] artinya buat Slice dari Array x dimulai dari index 0 Array x sepanjang (5–0) dengan kapasitas (panjang array x — 0= 10).
  • Baris 13 deklarasi Slice y: x[5:] artinya buat Slice dari Array x dimulai dari index 5 Array x sepanjang (Panjang Array x=10 — 5) 5 dengan kapasitas (panjang array x =10 — 5= 5).
  • Baris 15 print Slice s (%v untuk format string tipe data Array dan Slice), len dan cap .
  • Baris 17 print Slice y (%v untuk format string tipe data Array dan Slice), len dan cap .

Output :

s = [1 2 3 4 5], len = 5, cap = 10
y = [6 7 8 9 10], len = 5, cap = 5

Contoh lainnya seperti kode dibawah

x := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

s := x[1:5:6]
fmt.Printf(“s = %v, len = %d, cap = %d\n”, s, len(s), cap(s))

cap(s) menjadi 5 soalnya 6 itu kapasitas yang diambil dari x tidak semua 10 dan slice s ambil mulai dari indek ke-2 yaitu 1 jadi 6–1 = 5.

5. Deklarasi Slice Menggunakan fungsi Make.

Kadang kita ingin membuat slice tidak harus dengan inisialisasi datanya, nah caranya dengan fungsi Make ini. Programnya bisa dicoba disini.

Program 6.

Penjelasan program 6:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi slice s dengan panjang 5 dengan kapasitas 10 dengan anggota nilai default Integer yaitu 0 menggunakan fungsi Make.
  • Baris 11 print Slice s (%v untuk format string tipe data Array dan Slice), len dan cap .

Ouput :

s = [0 0 0 0 0], len = 5, cap = 10

6. Deklarasi Slice dari slice.

Kita bisa membuat Slice dari Slice programnya bisa dicoba disini.

Program 7.

Penjelasan program 7:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan Literal dengan panjang 10 dengan anggotanya 1,2,3,4,5,6,7,8,9,10.
  • Baris 11 deklarasi Slice s : x[:5] artinya buat Slice dari Array x dimulai dari index 0 Array x sepanjang (5–0) dengan kapasitas (panjang array x 10— 0= 10).
  • Baris 13 deklarasi Slice y: x[5:] artinya buat Slice dari Array x dimulai dari index 5 Array x sepanjang (Panjang Array x 10 — 5=5) 5 dengan kapasitas (panjang array x 10 — 5= 5).
  • Baris 15 print Slice s (%v untuk format string tipe data Array dan Slice), len dan cap .
  • Baris 17 print Slice y (%v untuk format string tipe data Array dan Slice), len dan cap .

Output :

s = [1 2 3 4 5], len = 5, cap = 10
y = [6 7 8 9 10], len = 5, cap = 5

Akses Anggota Slice

Anggota Slice dapat diakses dengan cara yang sama dengan Array. Programnya bisa dicoba disini.

Program 8.

Penjelasan program 8:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan panjang dan kapasitas 5, anggotanya 1,2,3,4, dan 5.
  • Baris 11 sampai 15 looping i=0 sampai i < len(s)=5 , len adalah fungsi untuk menghitung panjang Slice dan Array.
  • Baris 13 print Slice x index ke-i dengan nilai value x[i].

Ouput :

x[0] = 1
x[1] = 2
x[2] = 3
x[3] = 4
x[4] = 5

Slice punya cara lain untuk looping anggotanya dengan Range. Programnya bisa dicoba disini.

Program 9.

Penjelasan program 9:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan panjang dan kapasitas 5, anggotanya 1,2,3,4, dan 5.
  • Baris 11 dan 15 looping Slice x dengan range yang setiap langkah mengambil nilai index dan value nya Slice x.
  • Baris 13 print Slice x index ke-i dengan nilai nya value.

Ouput :

x[0] = 1
x[1] = 2
x[2] = 3
x[3] = 4
x[4] = 5

Karakter Slice yang paling mencolok berbeda dengan Array adalah panjangnya tidak fixed bisa berubah sesuai kebutuhan. Berikut adalah penjelasan tentang modifikasi Slice.

Modifikasi Nilai Anggota Slice

Kita bisa merubah nilai anggota Slice sama seperti copy by reference Array bisa dicoba diprogram disini.

Ingat index pertama dalam Slice atau Array adalah index ke-0

Program 10.

Penjelasan program 10:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Array x dengan Literal dengan panjang 10 dengan anggotanya 0,1,2,3,4,5,6,7,8,9.
  • Baris 10 deklarasi Slice y dari Array x indek ke-2 =2 sampai index ke-6 (7–1)= 6.
  • Baris 11 deklarasi Slice z dari Array x indek ke-5 =5 sampai index ke-8(9–1) = 9.
  • Baris 13 print “sebelum dirubah”.
  • Baris 15 print sebelum dirubah Array x [0 1 2 3 4 5 6 7 8 9].
  • Baris 17 print sebelum dirubah Slice y [2 3 4 5 6].
  • Baris 19 print sebelum dirubah Slice z [5 6 7 8 9].
  • Baris 21 ganti anggota index ke-4 Slice y yaitu 6 menjadi 60.
  • Baris 22 ganti anggota index ke-0 Slice z yaitu 5 menjadi 50.
  • Baris 24 print “setelah dirubah”.
  • Baris 15 print setelah dirubah Array x [0 1 2 3 4 50 60 7 8 9]. Berubah index ke-5 dan ke-6 karena perubahan by reference Slice y dan z yang asalnya dari Array x.
  • Baris 17 print setelah dirubah Slice y [2 3 4 50 60]. Berubah index ke-3 dan ke-4 karena perubahan by reference Slice y dan z yang asalnya dari Array x.
  • Baris 19 print setelah dirubah Slice z [50 60 7 8]. Berubah index ke-0 dan ke-1 karena perubahan by reference Slice y dan z yang asalnya dari Array x.

Output :

sebelum dirubah
sebelum dirubah x = [0 1 2 3 4 5 6 7 8 9]
sebelum dirubah y = [2 3 4 5 6]
sebelum dirubah z = [5 6 7 8]
setelah dirubah
setelah dirubah x = [0 1 2 3 4 50 60 7 8 9]
setelah dirubah y = [2 3 4 50 60]
setelah dirubah z = [50 60 7 8]

Copy Slice

Seperti Array Slice juga bisa kita copy antara satu variabel Slice kevariabel yang lain contohnya bisa dicoba disini.

Program 11.

Penjelasan program 11:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan Literal dengan panjang 10 dengan anggotanya 0,1,2,3,4,5,6,7,8,9.
  • Baris 10 deklarasi Slice y dengan fungsi make tipe data Integer panjang 11.
  • Baris 13 deklarasi Slice z dengan fungsi make tipe data Integer panjang 5.
  • Baris 15 Copy Slice x ke Slice y, teman-teman perhatikan panjang Slice x adalah 10 sedangkan Slie y adalah 11 maka yang akan di-copy sebanyak 10 anggota Slice x. Fungsi Copy mempunyai nilai balik jumlah anggota yang di copy dalam hal ini variabel Integer jumlahYangDiCopyY =10
  • Baris 17 Copy Slice x ke Slice z, karena kapasitas Slice z lima maka akan di-Copy sebanyak lima anggota Slice x. Jumlah anggota yang di-copy disimpan di variabel jumlahYangDiCopyZ.
  • Baris 19 Print Slice x.
  • Baris 21 Print Slice y.
  • Baris 23 Print Slice z.
  • Baris 25 Print jumlahYangDiCopyY.
  • Baris 27 Print jumlahYangDiCopyZ.

Output :

x = [0 1 2 3 4 5 6 7 8 9]
y = [0 1 2 3 4 5 6 7 8 9 0]
z = [0 1 2 3 4]
jumlah anggota array yang copy dari x ke y adalah = 10
jumlah anggota array yang copy dari x ke z adalah = 5

Merubah jumlah anggota Slice

Fitur yang sangat berguna dalam Slice adalah bisa merubah jumlah anggotanya tidak seperti Array yang jumlah anggotanya tetap. Teman-teman mungkin bertanya ya sudah kita pakai Slice aja semua tidak usah pakai Array toh semua yang bisa dilakukan Array bisa dilakukan Slice. Nah hal ini yang menurut saya untuk coder pemula akan melihat adanya Slice akan membuat Array tidak berguna padahal bukan seperti itu. Ada dua yang teman-teman harus perhatikan ketika ngoding yaitu :

  1. Kode harus mudah dibaca.
  2. Kode secara performance harus mantap.

nomor dua diatas mengenai Slice walaupun powerfull secara fungsi tetapi dibanding Array kalah performancenya, jadi bijaklah dalam ngoding kalau dirasa oleh Array kita udah bisa menyelesaikan permasalahan program kenapa harus pake Slice.

Berikut adalah contoh program contoh merubah anggota slice dengan fungsi append, bisa dicoba disini.

Program 12.

Penjelasan program 12:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan Literal dengan panjang 10 dengan anggotanya 0,1,2,3,4,5,6,7,8,9.
  • Baris 11 deklarasi Slice y dengan fungsi make tipe data Integer panjang 11 kapasitas 11.
  • Baris 13 deklarasi Slice z dengan fungsi make tipe data Integer panjang dan kapasitas 5.
  • Baris 15 Copy Slice x ke Slice y.
  • Baris 17 Copy Slice x ke Slice z.
  • Baris 19 Print Slice x.
  • Baris 21 Print Slice y beserta panjang dan kapasitasnya. Teman-teman perhatikan elemen terakhir Slice y 0 dan 10 anggota pertamanya sama dengan Slice x
  • Baris 23 Print Slice z beserta panjang dan kapasitasnya. Teman-teman perhatikan karena panjang Slice z lima maka yang di-copy dari Slice x adalah lima anggota pertamanya.
  • Baris 25 merubah deklarasi Slice y menjadi semua anggota Array x ditambah satu anggota lagi yaitu 10.
  • Baris 27 Print Slice y beserta panjang dan kapasitasnya yaitu 11 dan 20, kenapa begitu? di-Golang jika suatu Slice di-append maka akan menambahkan kapasitasnya menjadi dua kali lipat kapasitas Slice awalnya jika tidak mencukupi untuk panjang yang baru. Teman-teman perhatikan kapasitasnya Slice x 10 sesuai dengan panjang internal Array nya, di-append satu anggota 10 dimasukan ke Slice y , kapasitas Slice y tidak menjadi 11 tetapi menjadi 20, soalnya setiap append akan ditambahkan sebanyak kapasitas internal Array nya yaitu kapasitas Slice x 10 karena panjang yang baru 11 tidak mencukupi panjang awalnya , sehingga kapasitasi Slice y 20=10 + 10 .
  • Baris 29 append Slice z dari Slice z itu sendiri . Kapasitas awal Slice z ketika di-copy dari x adalah 5 karena append dari Slice z itu sendiri ditambah 1 dulu panjangnya kemudian kapasitasnya jadi 2 kali kapasitas baru yaitu 6 x 2 = 12 dengan alasan yang sama seperti baris 27.
  • Baris 31 Print Slice z beserta panjang dan kapasitas barunya.
  • Baris 33 deklarasi Slice y2 dengan fungsi make dengan panjang 3 dan kapasitas 10.
  • Baris 35 deklarasi Slice x2 dengan literal dengan jumlah panjang 5 dan kapasitas 5.
  • Baris 37 copy slice x2 ke y2 tentu saja yang di-copy 3 bilangan anggota x2.
  • Baris 39 deklarasi z2 dengan cara append y2 satu eleman Integer yaitu 10.
  • Baris 41 print Slice y2 beserta panjang dan kapasitasnya karena panjang y2 adalah 3 maka yang di-copy dari Slice x2 adalah 3 elemen pertamanya Slice x2.
  • Baris 43 print Slice z2 beserta panjang dan kapasitasnya. Teman-teman perhatikan kapasitas z2 berdasarkan baris 39 adalah 10 karena di-copy dari Slice y2 yang memilik panjang 3 dan kapasitas 10, maka ketika y2 di-append satu elemen 10 maka panjangnya jadi empat, karena kapasitasnya 10 sedangkan panjang yang baru cuman 4 maka kapasitas z2 tetap sama yaitu 10.

Output :

x = [0 1 2 3 4 5 6 7 8 9]
y = [0 1 2 3 4 5 6 7 8 9 0], len = 11, cap = 11
z = [0 1 2 3 4], len = 5, cap = 5
y = [0 1 2 3 4 5 6 7 8 9 10], len = 11, cap = 20
z = [0 1 2 3 4 10], len = 6, cap = 12
y2 = [0 1 2], len = 3, cap = 10
z2 = [0 1 2 10], len = 4, cap = 10

Gampang kan?

Gambar 2.

Menjumlahkan Dua Slice

Fungsi append juga bisa digunakan untuk menjumlahkan dua slice programnya bisa dicoba disini.

Program 13.

Penjelasan program 13:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 deklarasi Slice x dengan tipe Integer dengan panjang 10 dan kapasitas 10 dengan anggota 0,1,2,3,4,5,6,7,8,9.
  • Baris 11 deklarasi Slice y dengan tipe Integer dengan panjag 5 dan kapasitas 5 dengan anggota 10,11,12,13,14,15.
  • Baris 13 deklarasi Slice z dengan menjumlahkan Slice x dan y . Teman-teman perhatikan … harus pake itu.
  • Baris 15 print Slice x beserta panjang dan kapasitasnya yaitu 10.
  • Baris 17 print Slice y beserta panjang dan kapasitasnya yaitu 5.
  • Baris 19 print Slice z beserta panjang 15 dan kapasitasnya 20. Teman-teman perhatikan kapasitasnya menjadi 20 bukan15. Hal ini terjadi karena di-Golang ketika menambahkan Slice x dengan Slice y :
  1. Pertama panjang Slice x dan y dijumlahkan = 10 + 5 = 15.
  2. 15 lebih besar dari kapasitas x 10 maka kapasitas z akan dinaikan menjadi 2x kapasitas x yaitu 2 x 10 = 20 .
  3. Dua puluh cukup untuk menampung 15 anggota.
  4. Kapasitas Slice z menjadi 20.

Jika kasusnya sebaliknya append(y,x…) maka :

  1. Panjang Slice y dan x akan dijumlahkan 10 + 5 = 15 .
  2. Lima belas lebih besar dari panjang y lima maka kapasitas akan menjadi 2x menjadi 10.
  3. Sepuluh masih kurang maka kapasitas y menjadi 3x menjadi 15.
  4. Nah sekarang udah pas 15 apakah kapasitas z menjadi 15? tidak karena selain Slice yang menjadi parameter pertama fungsi append dalam hal ini y ditambahkan berdasarkan kapasitas awalnya terus menerus sampai cukup,saya perhatikan harus bisa dibagi 4 sisanya 0 juga. Apakah 15 /4 sisanya 0 tidak , makanya ditambahkan lagi dengan angka supaya menjadi bisa dibagi 4 angka terdekat sisanya nol yaitu 16.

Ouput :

x = [0 1 2 3 4 5 6 7 8 9], len = 10, cap = 10
y = [10 11 12 13 14], len = 5, cap = 5
z = [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14], len = 15, cap = 20

Slice Multidimensi

Mirip dengan Array Slice bisa memiliki multi dimensi. Programnya bisa dicoba disini.

Program 14.

Penjelasan program 14:

  • Baris 1 kita akan menyimpan program ini di package main supaya di-compile menjadi executable(dijelaskan di post Golang Bagian 2).
  • Baris 3–5 kita akan menggunakan package fmt didalamnya terdapat fungsi Println/Printf yang berfungsi untuk print output ke standard output seperti monitor.
  • Baris 7 kita menggunakan fungsi khusus main sebagai pintu masuk program Go.
  • Baris 9 sampai 13 deklarasi Slice x 2 dimensi dengan panjang dan kapasitasnya dua. Anggota pertama Slice x adalah Slice juga bisa diakses dengan x[0] dengan panjang 5 dan kapasitas 5 anggotanya 1,2,3,4,5. Anggota kedua Slice x adalah Slice juga bisa diakses dengan x[1] dengan panjang dan kapasitas 6, anggotanya 10,20,30,40,50,60. Teman-teman perhatikan mirip dengan deklarasi array multi dimensi, tapi tidak ada angka di bagian ini [][].
  • Baris 15 print Slice x.
  • Baris 17 print Slice x[0].
  • Baris 19 print Slice x[1].

Output :

x = [[1 2 3 4 5] [10 20 30 40 50 60]], len = 2, cap = 2
x[0] = [1 2 3 4 5], len = 5, cap = 5
x[1] = [10 20 30 40 50 60], len = 6, cap = 6

Saya rasa teman-teman harus membaca blog Slice ini berulang-ulang supaya ngerti bener. Okayyyy sekian dulu #WFH enak juga #WFH, tetapi mendingan kerja biasa asal wabah ilang dimuka bumi dan tidak pernah kembali. Silahkan baca blog Golang lain nya di sini.

--

--

Neraka ngoding
Neraka Ngoding

Coder terbaik sebatununggal-bandung, west java, indonesia belum terkalahkan selama 15 tahun. “Coder adalah Identitas bukan profesi”