Slice: Daftar Dinamis
make, append, copy, len, dan cap
Slice: Daftar Dinamis adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Apa Itu Slice?
Slice adalah tampilan berukuran dinamis ke dalam array yang mendasarinya. Slice memiliki tiga komponen: pointer ke array, panjang, dan kapasitas.
- Slice adalah tipe referensi—beberapa slice dapat berbagi array pendukung yang sama
- Sebagian besar pekerjaan yang menyerupai daftar di Go menggunakan slice, bukan array
Literal Slice dan make
Buat slice dengan literal atau make:
package main
import "fmt"
func main() {
nums := []int{1, 2, 3, 4, 5} // literal
strs := make([]string, 3) // len=3, cap=3, zero values
buf := make([]byte, 0, 64) // len=0, cap=64
fmt.Println(nums, strs, len(buf), cap(buf))
}len dan cap
len mengembalikan jumlah elemen yang sedang ada di dalam slice. cap mengembalikan kapasitas array yang mendasari, dihitung dari pointer awal slice.
package main
import "fmt"
func main() {
s := make([]int, 3, 8)
fmt.Println(len(s)) // 3
fmt.Println(cap(s)) // 8
}append: Memperbesar Slice
append menambahkan elemen ke slice dan mengalokasikan array pendukung baru saat kapasitas terlampaui:
package main
import "fmt"
func main() {
s := []int{1, 2, 3}
s = append(s, 4, 5)
s = append(s, []int{6, 7, 8}...)
fmt.Println(s) // [1 2 3 4 5 6 7 8]
}Membuat Sub-Slice
Gunakan sintaks [low:high] untuk membuat sub-slice (yang berbagi array pendukung):
package main
import "fmt"
func main() {
a := []int{0, 1, 2, 3, 4, 5}
b := a[1:4] // [1 2 3]
c := a[:3] // [0 1 2]
d := a[3:] // [3 4 5]
fmt.Println(b, c, d)
}copy: Slice Independen
copy menyalin elemen antar-slice dan mengembalikan jumlah elemen yang disalin. Tujuan dan sumber tidak berbagi memori:
package main
import "fmt"
func main() {
src := []int{1, 2, 3}
dst := make([]int, len(src))
n := copy(dst, src)
dst[0] = 99
fmt.Println(src, dst, n) // [1 2 3] [99 2 3] 3
}Slice nil vs Slice Kosong
Slice nil tidak memiliki array pendukung. Slice kosong memiliki array pendukung, tetapi panjangnya 0. Keduanya memiliki len == 0:
package main
import "fmt"
func main() {
var nilSlice []int
emptySlice := []int{}
fmt.Println(nilSlice == nil) // true
fmt.Println(emptySlice == nil) // false
fmt.Println(len(nilSlice), len(emptySlice)) // 0 0
nilSlice = append(nilSlice, 1) // safe!
}Menghapus Elemen
Go tidak memiliki fungsi bawaan untuk menghapus elemen dari slice. Pendekatan idiomatisnya menggunakan append:
package main
import "fmt"
func main() {
s := []int{1, 2, 3, 4, 5}
i := 2 // delete index 2
s = append(s[:i], s[i+1:]...)
fmt.Println(s) // [1 2 4 5]
}Menyisipkan Elemen
Sisipkan pada posisi i dengan menggabungkan append dan slicing:
package main
import "fmt"
func main() {
s := []int{1, 2, 4, 5}
i := 2
s = append(s[:i+1], s[i:]...)
s[i] = 3
fmt.Println(s) // [1 2 3 4 5]
}Jebakan Slice: Array Pendukung yang Dibagikan
Sub-slice berbagi array pendukung—mengubah salah satunya akan memengaruhi yang lain sampai terjadi alokasi ulang:
package main
import "fmt"
func main() {
a := []int{1, 2, 3, 4}
b := a[:2] // shares backing array
b[0] = 99
fmt.Println(a) // [99 2 3 4] — a is changed!
}Pemeriksaan Singkat
Apa yang dikembalikan oleh append?
Rangkuman: Slice
Hal-hal penting:
- Slice = pointer + len + cap; slice membungkus array
- Gunakan
makeuntuk mengalokasikan kapasitas terlebih dahulu - Selalu tetapkan hasil dari
append copymembuat slice yang independen- Waspadai array pendukung yang dibagikan oleh sub-slice
Tugas Latihan
Buat slice berisi 5 bilangan bulat dengan make, tambahkan tiga nilai lagi, lalu salin ke slice baru dan ubah salinannya tanpa memengaruhi slice asli. Cetak keduanya.
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Slice: Daftar Dinamis” gratis?
Ya — teks lengkap “Slice: Daftar Dinamis” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Slice: Daftar Dinamis”?
make, append, copy, len, dan cap Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Slice: Daftar Dinamis” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Array: Koleksi dengan Panjang Tetap
- Slice: Daftar Dinamis
- Map: Penyimpanan Kunci-Nilai
- Melakukan Iterasi pada Koleksi dengan range