Slices

Slice adalah struktur data yang mirip array tetapi dengan ukuran yang dinamis (bisa berubah).

Contoh Masalah

Bagaimana cara menyimpan dan mengolah kumpulan data yang ukurannya bisa berubah? Misalnya:

  1. Daftar tugas yang bisa ditambah atau dikurangi
  2. Daftar peserta yang bisa bertambah
  3. Mengambil sebagian data dari kumpulan data yang besar

Penyelesaian

package main

import "fmt"

func main() {
    // 1. Membuat slice
    // Cara 1: dari array
    arr := [5]int{1, 2, 3, 4, 5}
    slice1 := arr[1:4] // mengambil elemen index 1,2,3
    
    // Cara 2: langsung
    slice2 := []int{10, 20, 30, 40, 50}
    
    // Cara 3: dengan make
    slice3 := make([]int, 3, 5) // panjang 3, kapasitas 5

    // 2. Menampilkan slice
    fmt.Println("Slice 1:", slice1)
    fmt.Println("Slice 2:", slice2)
    fmt.Println("Slice 3:", slice3)

    // 3. Menambah elemen (append)
    slice2 = append(slice2, 60)
    fmt.Println("\nSetelah append 60:", slice2)

    // 4. Mengambil sebagian slice (slicing)
    sebagian := slice2[1:4]
    fmt.Println("Sebagian (index 1-3):", sebagian)

    // 5. Contoh penggunaan: daftar tugas
    var tugas []string
    
    // Menambah tugas
    tugas = append(tugas, "Belajar Go")
    tugas = append(tugas, "Buat Proyek")
    tugas = append(tugas, "Menulis Blog")
    
    fmt.Println("\nDaftar Tugas:")
    for i, t := range tugas {
        fmt.Printf("%d. %s\n", i+1, t)
    }

    // Menghapus tugas kedua (index 1)
    tugas = append(tugas[:1], tugas[2:]...)
    
    fmt.Println("\nSetelah menghapus tugas kedua:")
    for i, t := range tugas {
        fmt.Printf("%d. %s\n", i+1, t)
    }
}

Penjelasan Kode

  1. Membuat Slice

    • Dari array: array[start:end]
    • Langsung: []type{values}
    • Dengan make: make([]type, length, capacity)
  2. Operasi Slice

    • Append: menambah elemen
    • Slicing: mengambil sebagian
    • len(): panjang slice
    • cap(): kapasitas slice
  3. Perbedaan dengan Array

    • Ukuran bisa berubah
    • Referensi ke array dasar
    • Lebih fleksibel

Output

Slice 1: [2 3 4]
Slice 2: [10 20 30 40 50]
Slice 3: [0 0 0]

Setelah append 60: [10 20 30 40 50 60]
Sebagian (index 1-3): [20 30 40]

Daftar Tugas:
1. Belajar Go
2. Buat Proyek
3. Menulis Blog

Setelah menghapus tugas kedua:
1. Belajar Go
2. Menulis Blog

Tips

  • Gunakan slice untuk data yang ukurannya bisa berubah
  • Perhatikan kapasitas saat menggunakan make
  • Slice adalah reference type (berbagi memori)
  • Gunakan append untuk menambah elemen
  • Hati-hati dengan slice of slice (sharing array)