flag.String ve flag.Int
- Go kursu
- Orta seviye
- Ders 72/80
- 4 dk
Tip belirterek flag tanımlamayı öğrenirsin.
flag.String ve flag.Int
flag.String, flag.Int, flag.Duration gibi fonksiyonlar bir işaretçi döndürür; değer Parse sonrası dolar ve *ad ile okunur. Alternatif olarak ...Var biçimleri var olan bir değişkene bağlar:
ad := flag.String("ad", "dünya", "selamlanacak kişi")
var sure time.Duration
flag.DurationVar(&sure, "sure", 5*time.Second, "zaman aşımı")
flag.Parse()
fmt.Println("Merhaba", *ad, sure)Duration seçenekleri -sure=1m30s gibi okunur değerler kabul eder.
Kendi seçenek türün
flag.Value arayüzünü (String() ve Set(string) error) uygulayan her tür seçenek olabilir. Örneğin tekrarlanabilir bir seçenek:
type liste []string
func (l *liste) String() string { return strings.Join(*l, ",") }
func (l *liste) Set(v string) error { *l = append(*l, v); return nil }
var etiketler liste
flag.Var(&etiketler, "etiket", "tekrarlanabilir")
// -etiket=go -etiket=web → [go web]Uygulama Tekrarlanabilir seçenek
Yukarıdaki liste türünü yaz. Bir FlagSet'te fs.Var(&etiketler, "etiket", "...") ile kaydet ve []string{"-etiket=go", "-etiket=web"} ayrıştırıp etiketler'i yazdır.
Başlangıç kodu
package main
import (
"flag"
"fmt"
"strings"
)
func main() {
// buraya yaz
}Örnek çözüm
package main
import (
"flag"
"fmt"
"strings"
)
type liste []string
func (l *liste) String() string { return strings.Join(*l, ",") }
func (l *liste) Set(v string) error { *l = append(*l, v); return nil }
func main() {
var etiketler liste
fs := flag.NewFlagSet("app", flag.ContinueOnError)
fs.Var(&etiketler, "etiket", "tekrarlanabilir")
if err := fs.Parse([]string{"-etiket=go", "-etiket=web"}); err != nil {
fmt.Println(err)
return
}
fmt.Println(etiketler)
}Beklenen çıktı
[go web]
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>ad := flag.String(...)</code> sonrasında <code>Parse</code>'tan önce <code>*ad</code> okunursa ne gelir?
- nil
- panic
- Varsayılan değer Doğru cevap
- Kullanıcının verdiği değer
Açıklama: İşaretçi tanımlanınca varsayılanla doldurulur; komut satırı değerleri ancak Parse çağrılınca yazılır.
2 Değeri oku
ad := flag.String("ad", "dünya", "kişi")
flag.Parse()
fmt.Println("Merhaba", ____ad)
ad := flag.String("ad", "dünya", "kişi")
flag.Parse()
fmt.Println("Merhaba", *ad)
Açıklama: flag.String bir işaretçi döndürür; değere *ad ile erişilir.
3 Fonksiyon ve dönüş
| Kavram | Anlamı |
|---|---|
flag.String |
*string |
flag.Int |
*int |
flag.DurationVar |
Var olan değişkene bağlar |
flag.Var |
Özel flag.Value |