CodeBlanks Logo Icon CodeBlanks

flag.String ve flag.Int

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

main.go
package main

import (
    "flag"
    "fmt"
    "strings"
)

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
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

Soru
ad := flag.String("ad", "dünya", "kişi")
flag.Parse()
fmt.Println("Merhaba", ____ad)
Cevap
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

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