Arguments & Flag
Baca argumen baris perintah dan flag bernama.
Pahami konsepnya
Cara paling mentah: os.Args adalah slice string berisi seluruh argumen — indeks 0 nama program, sisanya apa pun yang diketik. Untuk CLI kecil itu sudah cukup, tapi memparsing opsi --nama nilai sendirian rentan salah.
Paket flag memberikan parsing yang rapi: deklarasikan tiap opsi dengan flag.String("nama", "default", "deskripsi"), flag.Int, flag.Bool; panggil flag.Parse(); lalu akses nilainya lewat pointer yang dikembalikan. Flag Boolean ditulis --verbose saja; flag bernilai --port 8080 atau --port=8080. Sisa argumen non-flag tersedia di flag.Args().
flag otomatis menyediakan --help yang mencetak seluruh opsi beserta deskripsinya — dokumentasi CLI gratis. Konvensinya penulisan: flag dideklarasikan di package-level atau dalam func init, Parse dipanggil di awal main.
Coba contoh kode
package main
import (
"flag"
"fmt"
)
func main() {
nama := flag.String("nama", "tamu", "nama yang disapa")
ulang := flag.Int("ulang", 1, "berapa kali menyapa")
flag.Parse()
for i := 0; i < *ulang; i++ {
fmt.Println("Halo,", *nama)
}
}Deklarasi flag mengembalikan POINTER ke variabel nilainya — dibaca lewat *nama setelah Parse. Jalankan: go run main.go --nama=Andi --ulang 3 mencetak sapaan tiga kali; tanpa flag, default "tamu" dan sekali. Coba --help untuk melihat daftar opsi otomatis.
os.Args mentah
func main() {
args := os.Args
fmt.Println("program:", args[0])
if len(args) > 1 {
fmt.Println("argumen pertama:", args[1])
}
}os.Args tidak memilah flag sama sekali — semuanya string mentah termasuk nama berkas program di depan. Cocok untuk "berikan saya satu kata" sederhana; begitu opsi muncul, pindah ke flag agar parsing dan bantuan terkelola.
Latihan singkat
Uji: tanpa argumen, flag jatuh ke default (`c`→`f`, angka cadangan 100) — program harus mencetak persis `c -> f: 212`.