Ce face flag.StringVar
Variantele ...Var primesc adresa unei variabile pe care o ai deja, în loc să returneze un pointer nou. Astfel poți folosi variabile obișnuite (fără *) sau câmpuri dintr-o structură de configurare.
Un truc des folosit: două nume pentru aceeași opțiune (scurt și lung), legate la aceeași variabilă: flag.BoolVar(&v, "v", false, "...") și flag.BoolVar(&v, "verbose", false, "..."). Există variante Var pentru toate tipurile: Float64Var, DurationVar, Int64Var etc.
Parametri
| Parametru | Descriere |
|---|---|
p |
Adresa variabilei care primește valoarea. |
name, value, usage |
Ca la flag.String, flag.Int, flag.Bool. |
Ce returnează
Nimic; valoarea ajunge în *p după Parse.
Exemple
Exemplul 1: Configurare într-o structură
package main
import (
"flag"
"fmt"
"os"
)
type Config struct {
Gazda string
Port int
Debug bool
}
func main() {
os.Args = []string{"api", "-gazda=api.exemplu.ro", "-port", "443"}
var cfg Config
flag.StringVar(&cfg.Gazda, "gazda", "localhost", "numele serverului")
flag.IntVar(&cfg.Port, "port", 8080, "portul")
flag.BoolVar(&cfg.Debug, "debug", false, "mod de depanare")
flag.Parse()
fmt.Printf("%+v\n", cfg)
}
Rezultat
{Gazda:api.exemplu.ro Port:443 Debug:false}
Exemplul 2: Nume scurt și lung pentru aceeași opțiune
package main
import (
"flag"
"fmt"
"os"
)
func main() {
os.Args = []string{"sync", "-verbose", "-n", "3"}
var detaliat bool
var incercari int
flag.BoolVar(&detaliat, "v", false, "detalii (scurt)")
flag.BoolVar(&detaliat, "verbose", false, "detalii")
flag.IntVar(&incercari, "n", 1, "număr de încercări (scurt)")
flag.IntVar(&incercari, "incercari", 1, "număr de încercări")
flag.Parse()
fmt.Println("detaliat:", detaliat, "| încercări:", incercari)
}
Rezultat
detaliat: true | încercări: 3
Greșeli frecvente
- Dai variabila fără
&:flag.StringVar(nume, ...)nu compilează. Funcția are nevoie de adresă. - Pui valori implicite diferite pentru numele scurt și cel lung. Ultima definiție scrie valoarea implicită în variabilă; păstrează-le identice.
Comenzi înrudite
flag.String: Definește o opțiune text (-nume=valoare) și returnează un pointer la valoarea ei.flag.Int: Definește o opțiune număr întreg (-n=10) și returnează un pointer la valoarea ei.flag.Bool: Definește o opțiune da/nu: simpla prezență (-v) o face true.flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.