Command-line flags
ou bandeiras de linha de comando, são uma forma
comum de especificar opções para programas em
linha de comando. Por exmeplo, em |
//`-l` é uma flag.
|
package main |
|
Go fornece um pacote |
import ( "flag" "fmt" ) |
func main() { |
|
Declarações básicas de flag estão disponíveis para
strings, inteiros e booleanos. Aqui, é declarado uma
string com a flag |
wordPtr := flag.String("word", "foo", "a string") |
Aqui são declaradas as flags |
numbPtr := flag.Int("numb", 42, "an int") forkPtr := flag.Bool("fork", false, "a bool") |
Também é possível declarar uma opção que use uma variável existente, declarada em algum lugar do código. Note que será preciso passar um ponteiro para a função que declara a flag. |
var svar string flag.StringVar(&svar, "svar", "bar", "a string var") |
Uma vez que todas as flags estão declaradas, chama-se
|
flag.Parse() |
Aqui as flags e qualquer eventual argumento posicional
serão apenas exibidos. Note que é necessário realizar
a dereference dos ponteiros, por exemplo, com a sintaxe
|
fmt.Println("word:", *wordPtr) fmt.Println("numb:", *numbPtr) fmt.Println("fork:", *forkPtr) fmt.Println("svar:", svar) fmt.Println("tail:", flag.Args()) } |
Para testar o programa das flags, é melhor
é melhor criar um binário com o comando |
$ go build command-line-flags.go
|
Execute o programa passando valores para todas as flags. |
$ ./command-line-flags -word=opt -numb=7 -fork -svar=flag word: opt numb: 7 fork: true svar: flag tail: [] |
Note que, se alguma flag for omitida, elas automaticamente são iniciadas com os valores padrão estipulados. |
$ ./command-line-flags -word=opt word: opt numb: 42 fork: false svar: bar tail: [] |
argumentos podem ser fornecidos depois das flags. |
$ ./command-line-flags -word=opt a1 a2 a3 word: opt ... tail: [a1 a2 a3] |
Note que o pacote |
$ ./command-line-flags -word=opt a1 a2 a3 -numb=7 word: opt numb: 42 fork: false svar: bar tail: [a1 a2 a3 -numb=7] |
Usa-se as flags |
$ ./command-line-flags -h Usage of ./command-line-flags: -fork=false: a bool -numb=42: an int -svar="bar": a string var -word="foo": a string |
Se for utilizada uma flag que não foi
especificada no pacote |
$ ./command-line-flags -wat flag provided but not defined: -wat Usage of ./command-line-flags: ... |
Próximo exemplo: Command-Line Subcommands.