flag.Parse
- Go kursu
- Orta seviye
- Ders 73/80
- 4 dk
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
package main
import (
"flag"
"fmt"
)
func main() {
// buraya yaz
}Örnek çözüm
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ı
flag.Parse()
if flag.____() < 1 {
flag.Usage()
os.Exit(2)
}
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ı |