Marca personalizada para listas en Golang
El paquete de banderas de Golang permite un fácil análisis de argumentos, pero generalmente admite tipos básicos como cadena, entero, o booleano. Esto puede parecer limitante cuando se trabaja con listas de valores.
Golang permite la creación de indicadores personalizados implementando la interfaz flag.Value. Esta interfaz requiere la implementación de dos métodos: String() y Set(). Al definir un indicador personalizado para listas, puede habilitar el análisis de múltiples valores pasados a través de indicadores de línea de comandos.
Definición de un indicador de lista personalizado
Considere el siguiente ejemplo :
package main import "flag" import "fmt" type arrayFlags []string // String() implements the flag.Value interface func (i *arrayFlags) String() string { return fmt.Sprintf("%v", *i) } // Set() implements the flag.Value interface func (i *arrayFlags) Set(value string) error { *i = append(*i, value) return nil } var myFlags arrayFlags func main() { flag.Var(&myFlags, "list1", "Some description for this param.") flag.Parse() fmt.Println(myFlags) }
Esto define un tipo de indicador personalizado llamado arrayFlags que acepta múltiples valores. La bandera está vinculada al nombre de la bandera "lista1" y se puede analizar usando flag.Parse().
Uso
Para pasar múltiples valores usando esta bandera personalizada, puede ejecutar el programa de la siguiente manera:
go run your_file.go --list1 value1 --list1 value2 --list1 value3
Esto completará el Variable myFlags con los tres valores proporcionados: ["valor1", "valor2", "valor3"]. Luego podrá acceder a estos valores dentro de su programa.
Playground
Para ver un ejemplo en vivo, puede visitar el siguiente patio de juegos: [playground link]
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3