package main

import "fmt"

func main() {
	// make menyiapkan slice dengan panjang 0 dan kapasitas 4.
	angka := make([]int, 0, 4)

	// append menambahkan elemen ke dalam slice.
	angka = append(angka, 30, 10, 20)
	fmt.Println("len:", len(angka), "cap:", cap(angka))

	// copy menyalin isi slice ke slice tujuan.
	salinan := make([]int, len(angka))
	copy(salinan, angka)
	fmt.Println("salinan:", salinan)

	// min dan max (Go 1.21+) menerima sejumlah argumen terurut.
	fmt.Println("min:", min(angka[0], angka[1], angka[2]))
	fmt.Println("max:", max(angka[0], angka[1], angka[2]))

	// clear (Go 1.21+) mengosongkan isi slice dan map.
	clear(angka)
	fmt.Println("slice setelah clear:", angka)

	stok := map[string]int{"pensil": 12, "pulpen": 7}
	clear(stok)
	fmt.Println("panjang map setelah clear:", len(stok))

	// new mengalokasikan zero value dan mengembalikan pointer-nya.
	pointer := new(int)
	fmt.Println("nilai *new(int):", *pointer)
}
