contente
1. Obtenha parâmetros de linha de comando
Segundo, o uso básico do pacote flag
1. Tipo de parâmetro de sinalização
2. Defina o parâmetro de sinalização da linha de comando
4. Exemplo completo do pacote de sinalizadores
O pacote flag embutido na linguagem Go implementa a análise de parâmetros de linha de comando, e o pacote flag facilita o desenvolvimento de ferramentas de linha de comando.
1. Obtenha parâmetros de linha de comando
os.Args: Se você simplesmente deseja obter argumentos de linha de comando, você pode usar os.Args para obter argumentos de linha de comando como no exemplo de código abaixo.
package main
import (
"fmt"
"os"
)
//os.Args demo
func main() {
//os.Args是一个[]string
if len(os.Args) > 0 {
for index, arg := range os.Args {
fmt.Printf("args[%d]=%v\n", index, arg)
}
}
}
Depois de compilar o código acima com go build -o "args_demo", execute:
$ ./args_demo a b c d
args[0]=./args_demo
args[1]=a
args[2]=b
args[3]=c
args[4]=d
os.Args é uma fatia de string que armazena argumentos de linha de comando e seu primeiro elemento é o nome do executável.
Segundo, o uso básico do pacote flag
import flag
1. Tipo de parâmetro de sinalização
Os tipos de parâmetros de linha de comando suportados pelo pacote flag são bool, int, int64, uint, uint64, float float64, string, duration.
parâmetro de sinalização |
Valor válido |
bandeira de string |
seqüência legal |
Sinalizador de inteiro |
1234, 0664, 0x1234 e outros tipos, também podem ser negativos. |
bandeira flutuante |
número de ponto flutuante legal |
sinalizador tipo bool |
1, 0, t, f, T, F, verdadeiro, falso, VERDADEIRO, FALSO, Verdadeiro, Falso。 |
bandeira do período de tempo |
Qualquer string de período de tempo válida. Como "300ms", "-1,5h", "2h45m". As unidades legais são "ns", "us" / "µs", "ms", "s", "m", "h". |
2. Defina o parâmetro de sinalização da linha de comando
Há duas maneiras comuns de definir parâmetros de sinalizador de linha de comando.
flag.Type()
O formato básico é o seguinte:
flag.Type(flag名, 默认值, 帮助信息)*Type
Por exemplo, se quisermos definir três parâmetros de linha de comando de nome, idade e casamento, podemos defini-los da seguinte forma:
name := flag.String("name", "张三", "姓名")
age := flag.Int("age", 18, "年龄")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "时间间隔")
Deve-se notar que, neste momento, nome, idade, casado e atraso são todos indicadores do tipo correspondente.
flag.TypeVar()
O formato básico é o seguinte: flag.TypeVar(Ponteiro de tipo, nome do sinalizador, valor padrão, informações de ajuda) Por exemplo, se quisermos definir três parâmetros de linha de comando de nome, idade e casamento, podemos defini-lo da seguinte forma:
var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")
A variável obtida por flag.TypeVar(), não um ponteiro, pode ser usada diretamente
Observações: Os parâmetros de linha de comando acima podem ser obtidos através de flag.Type() e flag.TypeVar(). Após a obtenção, você deve usar flag.Parse() para analisar
flag.Parse()
Depois que os parâmetros do sinalizador da linha de comando são definidos pelos dois métodos acima, os parâmetros da linha de comando precisam ser analisados chamando flag.Parse().
Os formatos de parâmetro de linha de comando suportados são os seguintes:
-flag xxx (使用空格,一个-符号)
--flag xxx (使用空格,两个-符号)
-flag=xxx (使用等号,一个-符号)
--flag=xxx (使用等号,两个-符号)
Entre eles, os parâmetros do tipo booleano devem ser especificados usando o sinal de igual.
A análise do sinalizador para antes do primeiro argumento não sinalizador (um único "-" não é um argumento sinalizador) ou após o terminador "-".
3, sinalizar outras funções
flag.Args() 返回命令行参数后的其他参数,以[]string类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参数个数
4. Exemplo completo do pacote de sinalizadores
func main() {
//定义命令行参数方式1
var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")
//解析命令行参数
flag.Parse()
fmt.Println(name, age, married, delay)
//返回命令行参数后的其他参数,这是个数组
fmt.Println(flag.Args())
//返回使用的命令行参数个数
fmt.Println(flag.NFlag())
//返回命令行参数后的其他参数个数
fmt.Println(flag.NArg())
}
Uso da linha de comando:
1) Dicas para usar parâmetros de linha de comando:
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年龄 (default 18)
-d duration
时间间隔
-married
婚否
-name string
姓名 (default "张三")
2) Use o parâmetro sinalizador de linha de comando normalmente:
$ ./flag_demo -name pprof --age 28 -married=false -d=1h30m
pprof 28 false 1h30m0s
[]
0
4
3) Use argumentos de linha de comando que não sejam sinalizadores:
$ ./flag_demo a b c
张三 18 false 0s
[a b c]
3
0