contenido
1. Obtener parámetros de línea de comando
En segundo lugar, el uso básico del paquete de banderas.
1. Tipo de parámetro de bandera
2. Defina el parámetro de la bandera de la línea de comando
4. Ejemplo completo de paquete de banderas
El paquete de banderas integrado en el lenguaje Go implementa el análisis de los parámetros de la línea de comandos, y el paquete de banderas facilita el desarrollo de herramientas de línea de comandos.
1. Obtener parámetros de línea de comando
os.Args: si simplemente desea obtener argumentos de línea de comando, puede usar os.Args para obtener argumentos de línea de comando como en el ejemplo de código a continuación.
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)
}
}
}
Después de compilar el código anterior con go build -o "args_demo", ejecute:
$ ./args_demo a b c d
args[0]=./args_demo
args[1]=a
args[2]=b
args[3]=c
args[4]=d
os.Args es un segmento de cadena que almacena argumentos de línea de comando y su primer elemento es el nombre del ejecutable.
En segundo lugar, el uso básico del paquete de banderas.
import flag
1. Tipo de parámetro de bandera
Los tipos de parámetros de línea de comando admitidos por el paquete de banderas son bool, int, int64, uint, uint64, float float64, string, duration.
parámetro de bandera |
valor válido |
bandera de cadena |
cadena legal |
Bandera de entero |
1234, 0664, 0x1234 y otros tipos, también pueden ser negativos. |
bandera flotante |
número de punto flotante legal |
indicador de tipo bool |
1, 0, t, f, T, F, verdadero, falso, VERDADERO, FALSO, Verdadero, Falso。 |
bandera de período de tiempo |
Cualquier cadena de período de tiempo válida. Como "300ms", "-1.5h", "2h45m". Las unidades legales son "ns", "us" / "µs", "ms", "s", "m", "h". |
2. Defina el parámetro de la bandera de la línea de comando
Hay dos formas comunes de definir parámetros de marca de línea de comandos.
bandera.Tipo()
El formato básico es el siguiente:
flag.Type(flag名, 默认值, 帮助信息)*Type
Por ejemplo, si queremos definir tres parámetros de línea de comando de nombre, edad y matrimonio, podemos definirlo de la siguiente manera:
name := flag.String("name", "张三", "姓名")
age := flag.Int("age", 18, "年龄")
married := flag.Bool("married", false, "婚否")
delay := flag.Duration("d", 0, "时间间隔")
Cabe señalar que en este momento, nombre, edad, casado y retraso son todos indicadores del tipo correspondiente.
bandera.TypeVar()
El formato básico es el siguiente: flag.TypeVar(Type pointer, flag name, default value, help information) Por ejemplo, si queremos definir tres parámetros de línea de comando de nombre, edad y matrimonio, podemos definirlo de la siguiente manera:
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, "时间间隔")
La variable obtenida por flag.TypeVar(), no un puntero, se puede usar directamente
Observaciones: Los parámetros de línea de comando anteriores se pueden obtener a través de flag.Type() y flag.TypeVar(). Después de obtenerlos, debe usar flag.Parse() para analizar
bandera.Analizar()
Después de definir los parámetros de la bandera de la línea de comandos mediante los dos métodos anteriores, los parámetros de la línea de comandos deben analizarse llamando a flag.Parse().
Los formatos de parámetros de línea de comando admitidos son los siguientes:
-flag xxx (使用空格,一个-符号)
--flag xxx (使用空格,两个-符号)
-flag=xxx (使用等号,一个-符号)
--flag=xxx (使用等号,两个-符号)
Entre ellos, los parámetros de tipo booleano deben especificarse mediante el signo igual.
El análisis de indicadores se detiene antes del primer argumento que no sea indicador (un solo "-" no es un argumento de indicador) o después del terminador "-".
3, marca otras funciones
flag.Args() 返回命令行参数后的其他参数,以[]string类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参数个数
4. Ejemplo completo de paquete de banderas
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 de la línea de comandos:
1) Consejos para usar parámetros de línea de comandos:
$ ./flag_demo -help
Usage of ./flag_demo:
-age int
年龄 (default 18)
-d duration
时间间隔
-married
婚否
-name string
姓名 (default "张三")
2) Use el parámetro de bandera de línea de comando normalmente:
$ ./flag_demo -name pprof --age 28 -married=false -d=1h30m
pprof 28 false 1h30m0s
[]
0
4
3) Use argumentos de línea de comando que no sean de bandera:
$ ./flag_demo a b c
张三 18 false 0s
[a b c]
3
0