Ce face flag.Duration
flag.Duration citește valoarea cu time.ParseDuration, deci acceptă unități: ns, us, ms, s, m, h, și combinații ca 1h30m. Un număr fără unitate (în afară de 0) este refuzat.
Este mult mai clar decât o opțiune Int cu „secunde”: utilizatorul scrie exact ce vrea, iar în program primești un time.Duration gata de folosit.
Parametri
| Parametru | Descriere |
|---|---|
name |
Numele opțiunii. |
value |
Valoarea implicită, de exemplu 30*time.Second. |
usage |
Descrierea pentru ajutor. |
Ce returnează
Un *time.Duration.
Exemple
Exemplul 1: Timeout și interval
package main
import (
"flag"
"fmt"
"os"
"time"
)
func main() {
os.Args = []string{"monitor", "-interval=1m30s", "-timeout", "500ms"}
interval := flag.Duration("interval", time.Minute, "cât de des verificăm")
timeout := flag.Duration("timeout", 5*time.Second, "cât așteptăm un răspuns")
pauza := flag.Duration("pauza", 2*time.Hour, "pauza de noapte")
flag.Parse()
fmt.Println("interval:", *interval, "=", interval.Seconds(), "secunde")
fmt.Println("timeout:", *timeout)
fmt.Println("pauză:", *pauza)
}
Rezultat
interval: 1m30s = 90 secunde
timeout: 500ms
pauză: 2h0m0s
Exemplul 2: Număr fără unitate
Setul de opțiuni afișează eroarea și ajutorul, apoi Parse returnează eroarea.
package main
import (
"flag"
"fmt"
"os"
"time"
)
func main() {
fs := flag.NewFlagSet("monitor", flag.ContinueOnError)
fs.SetOutput(os.Stdout)
fs.Duration("timeout", 5*time.Second, "cât așteptăm un răspuns")
fmt.Println(fs.Parse([]string{"-timeout=30"}))
}
Rezultat
invalid value "30" for flag -timeout: parse error
Usage of monitor:
-timeout duration
cât așteptăm un răspuns (default 5s)
invalid value "30" for flag -timeout: parse error
Greșeli frecvente
- Scrii
-timeout=30și te aștepți la 30 de secunde. Unitatea este obligatorie:30s. - Folosești
dpentru zile.time.ParseDurationnu are zile; scrie48h.
Comenzi înrudite
flag.Int: Definește o opțiune număr întreg (-n=10) și returnează un pointer la valoarea ei.flag.Float64: Definește o opțiune număr cu zecimale (-tva=0.19) și returnează un pointer la valoarea ei.flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.exec.CommandContext: Ca exec.Command, dar procesul este oprit automat când contextul expiră sau este anulat.