cobra/pflag para Go: guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Biblioteca cobra/pflag para Go: flags de linha de comando poderosas

No mundo do desenvolvimento em Go, criar interfaces de linha de comando (CLI) práticas e flexíveis é uma tarefa essencial. A biblioteca padrão flag oferece funcionalidades básicas para análise de flags, mas seu alcance é limitado. É aí que entra o cobra/pflag — uma biblioteca robusta que expande os recursos do pacote padrão e é parte fundamental do ecossistema Cobra (o framework popular para criar aplicações CLI).

A principal vantagem do pflag sobre o flag padrão é o suporte a estilos de flags tanto POSIX/GNU (flags longas com hífen duplo, como --verbose) quanto BSD (flags curtas com um hífen, como -v). A biblioteca também permite combinar flags curtas (-abc em vez de -a -b -c), flags com argumentos obrigatórios, flags contadoras e muito mais. O pflag é totalmente compatível com a interface flag.Value, facilitando a migração de código existente.

Essa biblioteca é amplamente utilizada em projetos conhecidos como Kubernetes, Helm, Hugo e muitos outros. Se você planeja criar uma aplicação CLI séria em Go, o pflag será uma ferramenta indispensável, oferecendo flexibilidade, desempenho e conformidade com os padrões modernos de linha de comando.

Instalação

A instalação da biblioteca é feita da forma padrão do Go, usando o gerenciador de pacotes go get:

go get github.com/spf13/pflag

Após executar este comando, a biblioteca será adicionada ao seu módulo Go (arquivo go.mod). Agora você pode importá-la no seu código:

import "github.com/spf13/pflag"

Início rápido

Vamos criar uma aplicação simples que recebe um nome de usuário e uma flag para exibir uma saudação:

package main

import (
    "fmt"
    "github.com/spf13/pflag"
)

func main() {
    // Definindo as flags
    name := pflag.String("name", "Mundo", "nome para a saudação")
    verbose := pflag.BoolP("verbose", "v", false, "exibir saída detalhada")
    
    // Analisando as flags
    pflag.Parse()
    
    // Usando os valores
    if *verbose {
        fmt.Printf("Modo: detalhado\n")
        fmt.Printf("Nome: %s\n", *name)
    }
    
    fmt.Printf("Olá, %s!\n", *name)
}

Execute o programa com diferentes flags:

go run main.go
go run main.go --name=Go
go run main.go -n Go -v
go run main.go --verbose --name "Desenvolvedor Go"

Métodos e funções principais

1. pflag.String(name, shorthand, value, usage)

Assinatura: func String(name string, shorthand string, value string, usage string) *string

Cria uma flag do tipo string com o nome especificado, forma abreviada, valor padrão e descrição. Retorna um ponteiro para string.

host := pflag.StringP("host", "H", "localhost", "endereço do servidor")
pflag.Parse()
fmt.Printf("Conectando a %s\n", *host)

2. pflag.Int(name, shorthand, value, usage)

Assinatura: func Int(name string, shorthand string, value int, usage string) *int

Cria uma flag do tipo inteiro. Útil para especificar portas, limites e outros parâmetros numéricos.

port := pflag.IntP("port", "p", 8080, "porta para escutar")
pflag.Parse()
fmt.Printf("Servidor rodando na porta %d\n", *port)

3. pflag.Bool(name, shorthand, value, usage)

Assinatura: func Bool(name string, shorthand string, value bool, usage string) *bool

Cria uma flag do tipo booleano. Flags do tipo chave que não exigem valor (apenas a presença da flag já a ativa).

Recommendations