Ce face flag.Usage
flag.Usage nu este o funcție obișnuită, ci o variabilă de tip func(). Ea este apelată de flag.Parse când utilizatorul scrie -h / -help sau dă o opțiune greșită. Varianta implicită afișează „Usage of program:” urmat de flag.PrintDefaults().
Îi atribui o funcție proprie (înainte de Parse) ca să adaugi descrierea programului, exemple de folosire sau argumentele obișnuite. Scrie în flag.CommandLine.Output(), ca mesajul să ajungă acolo unde ajunge restul ajutorului.
Ce returnează
Nu se aplică (este o variabilă).
Exemple
Exemplul 1: Mesaj de utilizare propriu, afișat la -h
Simulăm comanda ./redimensioneaza -h. Parse afișează ajutorul și oprește programul cu codul 0.
package main
import (
"flag"
"fmt"
"os"
)
func main() {
os.Args = []string{"redimensioneaza", "-h"}
flag.CommandLine.SetOutput(os.Stdout)
flag.Int("latime", 800, "lățimea nouă, în pixeli")
flag.Int("calitate", 85, "calitatea JPEG (1-100)")
flag.Usage = func() {
out := flag.CommandLine.Output()
fmt.Fprintln(out, "redimensioneaza - micșorează imagini JPEG")
fmt.Fprintln(out, "")
fmt.Fprintln(out, "Utilizare: redimensioneaza [opțiuni] imagine1.jpg [imagine2.jpg ...]")
fmt.Fprintln(out, "Opțiuni:")
flag.PrintDefaults()
}
flag.Parse()
fmt.Println("această linie nu se mai execută")
}
Rezultat
redimensioneaza - micșorează imagini JPEG
Utilizare: redimensioneaza [opțiuni] imagine1.jpg [imagine2.jpg ...]
Opțiuni:
-calitate int
calitatea JPEG (1-100) (default 85)
-latime int
lățimea nouă, în pixeli (default 800)
Exemplul 2: Ajutorul la argumente lipsă
package main
import (
"flag"
"fmt"
"os"
)
func main() {
os.Args = []string{"traduce"}
flag.CommandLine.SetOutput(os.Stdout)
flag.String("din", "en", "limba sursă")
flag.String("in", "ro", "limba țintă")
flag.Usage = func() {
fmt.Fprintln(flag.CommandLine.Output(), "Utilizare: traduce [-din en] [-in ro] text...")
flag.PrintDefaults()
}
flag.Parse()
if flag.NArg() == 0 {
flag.Usage()
return
}
}
Rezultat
Utilizare: traduce [-din en] [-in ro] text...
-din string
limba sursă (default "en")
-in string
limba țintă (default "ro")
Greșeli frecvente
- Scrii cu
fmt.PrintlnînUsage, iarPrintDefaultsscrie pe stderr. Mesajul ajunge jumătate pe un canal, jumătate pe celălalt; foloseșteflag.CommandLine.Output(). - Setezi
flag.Usagedupăflag.Parse(). La o eroare de parsare se folosește încă varianta implicită.
Comenzi înrudite
flag.PrintDefaults: Afișează lista tuturor opțiunilor definite, cu tipul, descrierea și valoarea implicită.flag.Parse: Citește opțiunile din linia de comandă (os.Args) și completează variabilele definite cu flag.String, flag.Int etc.flag.Args: Returnează argumentele obișnuite rămase după opțiuni: toate (Args), unul anume (Arg) sau câte sunt (NArg).