usa tutorial que para instalar index elastic crear consultas comandos cluster go command-line-interface command-line-arguments

tutorial - ¿Se pueden configurar los indicadores de línea de comando en Go en obligatorio?



para que se usa elastic search (5)

¿Hay alguna manera de establecer que ciertas banderas sean obligatorias, o tengo que verificar su presencia por mi cuenta?


Como ya se mencionó , el paquete de flag no proporciona esta función directamente y, por lo general, usted puede (y debería) poder proporcionar un valor predeterminado razonable. Para los casos en los que solo necesita un pequeño número de argumentos explícitos (por ejemplo, un nombre de archivo de entrada y salida), podría usar argumentos posicionales (por ejemplo, después de flag.Parse() verifique que flag.NArg()==2 y luego input, output := flag.Arg(0), flag.Arg(1) ).

Sin embargo, si tienes un caso donde esto no es sensato; diga unos cuantos indicadores de enteros que desee aceptar en cualquier orden, donde cualquier valor de entero sea razonable, pero ningún valor predeterminado lo es. Luego puede usar la función flag.Visit para verificar si los indicadores que le interesan están establecidos explícitamente o no. Creo que esta es la única forma de saber si un indicador se estableció explícitamente a su valor predeterminado (sin contar un flag.Value personalizado flag.Value Tipo de valor con una implementación de Set que mantuvo el estado).

Por ejemplo, quizás algo como:

required := []string{"b", "s"} flag.Parse() seen := make(map[string]bool) flag.Visit(func(f *flag.Flag) { seen[f.Name] = true }) for _, req := range required { if !seen[req] { // or possibly use `log.Fatalf` instead of: fmt.Fprintf(os.Stderr, "missing required -%s argument/flag/n", req) os.Exit(2) // the same exit code flag.Parse uses } }

Playground

Esto generaría un error si el indicador "-b" o "-s" no se hubiera establecido explícitamente.


Me gusta el paquete github.com/jessevdk/go-flags para usar en CLI. Es proporcionar el atributo required , para establecer la bandera obligatoria. Como eso:

var opts struct { ... // Example of a required flag Name string `short:"n" long:"name" description:"A name" required:"true"` ... }


Si tiene una ruta de bandera, simplemente verifique si * la ruta contiene algún valor

var path = flag.String("f", "", "/path/to/access.log") flag.Parse() if *path == "" { usage() os.Exit(1) }


github.com/jessevdk/go-flags permite declarar los indicadores requeridos y los argumentos posicionales requeridos:

var opts struct { Flag string `short:"f" required:"true" name:"a flag"` Args struct { First string `positional-arg-name:"first arg"` Sencond string `positional-arg-name:"second arg"` } `positional-args:"true" required:"2"` } args, err := flags.Parse(&opts)


El paquete de flag no admite marcas obligatorias o requeridas (lo que significa que la bandera debe especificarse explícitamente).

Lo que puede hacer es usar valores predeterminados razonables para (todos) indicadores. Y si un indicador es algo como que no hay un valor predeterminado razonable, compruebe el valor al inicio de su aplicación y deténgalo con un mensaje de error. Debería realizar la validación del valor del indicador de todos modos (no solo para los indicadores obligatorios), por lo que esto no debería significar ningún gasto general (grande), y esta es una buena práctica en general.