package main

import (
	"flag"
	"fmt"
	"os"
	"strings"
)

func main() {
	// flag.String, flag.Int, dan flag.Bool mengembalikan pointer ke nilai.
	nama := flag.String("nama", "tamu", "nama pengguna yang disapa")
	umur := flag.Int("umur", 18, "umur pengguna dalam tahun")
	verbose := flag.Bool("verbose", false, "tampilkan detail ekstra")

	// Alihkan keluaran package flag ke stdout, lalu cetak teks usage.
	flag.CommandLine.SetOutput(os.Stdout)
	flag.Usage = func() {
		fmt.Println("Cara pakai: go run flag-demo.go [flag] [argumen posisi...]")
		flag.PrintDefaults()
	}
	flag.PrintDefaults()

	// flag.Parse membaca argumen command line sebenarnya.
	flag.Parse()

	fmt.Printf("Halo, %s (umur %d tahun)\n", *nama, *umur)
	fmt.Println("verbose :", *verbose)
	if sisa := flag.Args(); len(sisa) > 0 {
		fmt.Println("posisi  :", strings.Join(sisa, ", "))
	}
}
