Sinalizador personalizado para listas em Golang
O pacote de sinalizadores de Golang permite fácil análise de argumentos, mas normalmente suporta tipos básicos como string, inteiro, ou booleano. Isso pode parecer limitante ao trabalhar com listas de valores.
Golang permite a criação de sinalizadores personalizados implementando a interface flag.Value. Esta interface requer a implementação de dois métodos: String() e Set(). Ao definir um sinalizador personalizado para listas, você pode ativar a análise de vários valores passados por sinalizadores de linha de comando.
Definindo um sinalizador de lista personalizado
Considere o exemplo a seguir :
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) }
Isso define um tipo de sinalizador personalizado chamado arrayFlags que aceita vários valores. O sinalizador está vinculado ao nome do sinalizador "list1" e pode ser analisado usando flag.Parse().
Usage
Para passar vários valores usando este sinalizador personalizado, você pode executar o programa da seguinte maneira:
go run your_file.go --list1 value1 --list1 value2 --list1 value3
Isso preencherá o Variável myFlags com os três valores fornecidos: ["valor1", "valor2", "valor3"]. Você pode então acessar esses valores em seu programa.
Playground
Para obter um exemplo ao vivo, você pode visitar o seguinte playground: [link do playground]
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3