← Kembali ke kursus
Pelajaran kursus · Go
Pelajaran 43

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`.