package main

import "fmt"

func main() {
	// Slice nil: deklarasi tanpa make maupun literal.
	var s []int
	fmt.Println("s            :", s)
	fmt.Println("s == nil     :", s == nil)
	fmt.Println("len(s)       :", len(s))

	// append pada nil slice diperbolehkan: slice tumbuh otomatis.
	s = append(s, 10, 20)
	fmt.Println("setelah append:", s)
	fmt.Println("s == nil     :", s == nil)

	// Slice kosong bukan nil: nol elemen tetapi sudah dialokasikan.
	kosong := []int{}
	fmt.Println("kosong       :", kosong)
	fmt.Println("kosong == nil:", kosong == nil)

	// Map nil: pembacaan tetap sah dan menghasilkan zero value.
	var m map[string]int
	fmt.Println("m            :", m)
	fmt.Println("m == nil     :", m == nil)
	fmt.Println("len(m)       :", len(m))
	fmt.Println(`m["budi"]     :`, m["budi"])

	// Solusi agar bisa menulis: buat map dengan make.
	siap := make(map[string]int)
	siap["budi"] = 25
	fmt.Println("siap         :", siap)
}
