package main

import "fmt"

func main() {
	// make dengan panjang dan kapasitas eksplisit: len 0, cap 5.
	s := make([]int, 0, 5)
	fmt.Printf("awal        len=%d cap=%d\n", len(s), cap(s))
	s = append(s, 1, 2)
	fmt.Printf("setelah isi len=%d cap=%d\n", len(s), cap(s))

	// Kapasitas hasil slicing: cap = len(a) - low.
	a := []int{10, 20, 30, 40, 50}
	b := a[1:3]
	c := a[2:5]
	fmt.Println("b :", b, "len:", len(b), "cap:", cap(b))
	fmt.Println("c :", c, "len:", len(c), "cap:", cap(c))

	// Pertumbuhan kapasitas ketika append melebihi ruang sisa.
	tumbuh := make([]int, 0, 2)
	fmt.Println("append 8 elemen satu per satu:")
	for i := 1; i <= 8; i++ {
		tumbuh = append(tumbuh, i)
		fmt.Printf("  len=%d cap=%d\n", len(tumbuh), cap(tumbuh))
	}
}
