CodeBlanks Logo Icon CodeBlanks

flag.Parse

Parse ile komut satırını ayrıştırmayı öğrenirsin.

flag.Parse ve argümanlar

Parse seçenekleri ayrıştırdıktan sonra kalan konumsal argümanlara flag.Args() ile ulaşılır; flag.NArg() sayısını, flag.Arg(i) tek bir argümanı verir:

// ./kopyala -f kaynak.txt hedef.txt
zorla := flag.Bool("f", false, "üzerine yaz")
flag.Parse()
if flag.NArg() != 2 {
    fmt.Fprintln(os.Stderr, "kullanım: kopyala [-f] KAYNAK HEDEF")
    os.Exit(2)
}
kaynak, hedef := flag.Arg(0), flag.Arg(1)

Kullanım hataları için çıkış kodu 2 geleneksel bir seçimdir.

Özel yardım metni

flag.Usage değişkenine kendi fonksiyonunu atayarak -h çıktısını özelleştirirsin:

flag.Usage = func() {
    fmt.Fprintf(flag.CommandLine.Output(), "kullanım: %s [seçenekler] DOSYA\n", os.Args[0])
    flag.PrintDefaults()
}

PrintDefaults tanımlı tüm seçenekleri açıklamalarıyla yazdırır.

Uygulama Konumsal argümanlar

Bir FlagSet'te f bool seçeneğini tanımla ve []string{"-f", "a.txt", "b.txt"} ayrıştır. *f, fs.NArg() ve fs.Arg(1) değerlerini tek satırda yazdır.

Başlangıç kodu

main.go
package main

import (
    "flag"
    "fmt"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import (
    "flag"
    "fmt"
)

func main() {
    fs := flag.NewFlagSet("kopyala", flag.ContinueOnError)
    f := fs.Bool("f", false, "üzerine yaz")
    if err := fs.Parse([]string{"-f", "a.txt", "b.txt"}); err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(*f, fs.NArg(), fs.Arg(1))
}

Beklenen çıktı

true 2 b.txt

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>./app -- -dosya.txt</code> komutunda <code>--</code> ne işe yarar?

  • Hata verir
  • Seçenek ayrıştırmayı bitirir; -dosya.txt konumsal argüman olur Doğru cevap
  • Yorum başlatır
  • Tüm seçenekleri sıfırlar

Açıklama: -- sonrasındaki her şey tire ile başlasa bile flag.Args() içinde konumsal argüman olarak kalır.

2 Argüman sayısı

Soru
flag.Parse()
if flag.____() < 1 {
    flag.Usage()
    os.Exit(2)
}
Cevap
flag.Parse()
if flag.NArg() < 1 {
    flag.Usage()
    os.Exit(2)
}

Açıklama: NArg, seçeneklerden sonra kalan konumsal argüman sayısını verir.

3 Fonksiyon ve sonuç

Kavram Anlamı
flag.Args() Kalan argümanlar
flag.NArg() Argüman sayısı
flag.Arg(0) İlk argüman
flag.NFlag() Verilen seçenek sayısı

Orta seviye bölümündeki tüm dersler