Boas Práticas para Ferramentas CLI
Testando CLIs, versionamento e distribuição via go install.
Busque em todas as páginas da documentação
Testando CLIs, versionamento e distribuição via go install.
Aplique estas regras na revisão de código, pipelines de lançamento e modelos de plataforma interna para que cada binário Go instale de forma previsível, falhe claramente e permaneça testável sem poluição de flags globais.
kubectl permanecem limpos.NO_COLOR e desative ANSI quando não for um TTY. Logs de CI e políticas de acessibilidade dependem disso.main enxuto; coloque a lógica em pacotes internal/. Permite testes unitários sem os.Exit.flag.CommandLine global em bibliotecas. Use FlagSet ou cobra por comando.internal/. CLI e API permanecem alinhados em enums e IDs.API_URL para api.url de forma previsível.config.example.yaml com placeholders.PersistentFlags apenas na raiz. Evite nomes de flags duplicados em pai e filho.Args ou enums. Contagens incorretas de argumentos produzem mensagens acionáveis.run(args []string) error sem fazer parsing de os.Args real. A lógica principal permanece segura para paralelismo.cobra.Command.SetArgs ou FlagSet.Parse isolado em testes CLI. Sem vazamento de flags entre testes.os/exec para códigos de saída e saída de ajuda. Capture erros de conexão em main.--help quando a superfície do comando estiver estável. Renomeações de flags não intencionais quebram scripts.go test ./... com o detector de corridas para CLIs concorrentes. Workers e TUIs expõem corridas cedo.-ldflags "-X main.version=…" no CI. O suporte pode mapear relatórios de bugs para builds.--version ou version. Corresponde a tags de imagem de contêiner e tags git.go install module/path@version para módulos públicos. Documente o caminho de importação no README.go.sum e notas de build reproduzíveis nos lançamentos. A revisão da cadeia de suprimentos depende disso.Update do bubbletea. Envie mensagens de conclusão de volta para o modelo.ctrl+c e sinais para CLIs em lote. Gravações parciais não devem corromper o estado remoto.Separação stdout/stderr, códigos de saída documentados, main enxuto, validação de configuração e pelo menos um teste de integração CLI são fortes bloqueadores de CI.
Documente exceções no README da ferramenta.
Sim.
cobra lida com o parsing; as regras de streams, testes, versionamento e distribuição ainda se aplicam.
Noções básicas ensinam a mecânica de flags e subcomandos.
Esta lista codifica hábitos de produção para equipes que enviam CLIs para operadores e CI.
Quando os subcomandos são manuais, as flags são poucas e o texto de ajuda é mantido manualmente.
Reavalie quando o autocompletar ou flags persistentes se tornarem itens de "a fazer" a cada sprint.
Mesmo ferramentas internas se beneficiam de binários Linux de CI.
Desenvolvedores macOS ainda precisam de builds nativos ou go install de tags de módulo.
Versões de Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na build), chi (última versão - verifique na build), gin (última versão - verifique na build), echo (última versão - verifique na build), google.golang.org/grpc (última versão - verifique na build), sigs.k8s.io/controller-runtime (última versão - verifique na build), kubebuilder (última versão - verifique na build), tinygo (última versão - verifique os alvos de placa na build), wazero (última versão - verifique na build) e golangci-lint (última versão - verifique o conjunto de linters na build).
Revisado por Chris St. John·Última atualização: 18 de jul. de 2026