Frameworks CLI para Go (Golang): uma visão geral completa das ferramentas para criar aplicações de console

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

Frameworks CLI para Go (Golang): criando aplicações de console profissionais



Go (Golang) é merecidamente considerada uma das melhores linguagens para criar utilitários de console. Graças à compilação rápida, suporte nativo a multithreading e um sistema de pacotes conveniente, ferramentas lendárias como Docker, Kubernetes, Hugo e Terraform foram escritas em Go. No entanto, para criar uma CLI (Interface de Linha de Comando) verdadeiramente conveniente e flexível, muitas vezes é necessário não apenas a biblioteca padrão flag, mas também frameworks especializados. Neste artigo, analisaremos detalhadamente os melhores frameworks CLI para Go, seus recursos, vantagens e exemplos de uso.



Por que preciso de um framework CLI?



A biblioteca padrão flag lida bem com tarefas simples, mas quando seu projeto cresce, surgem necessidades de:

  • Suporte a comandos aninhados (subcomandos), como em git commit ou docker run.
  • Geração automática de ajuda e páginas man.
  • Autocompletar (bash/zsh/fish completion).
  • Análise de flags e argumentos complexos.
  • Modo de operação interativo (TUI).

É para essas tarefas que existem os frameworks CLI.



1. Cobra — o rei das CLIs em Go



Cobra é o framework mais popular para criar CLIs em Go. É usado em Kubernetes, Hugo, GitHub CLI e muitos outros projetos. O Cobra fornece uma interface poderosa para criar comandos, flags e argumentos.



Principais recursos:

  • Criação simples de comandos aninhados.
  • Geração automática de ajuda e páginas man.
  • Suporte a autocompletar para bash, zsh, fish e PowerShell.
  • Integração com Viper (gerenciador de configuração).
  • Geração de esqueleto do projeto através de cobra-cli init.


Exemplo de código com Cobra:

package main

import ( "fmt" "os"

"github.com/spf13/cobra")

func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Utilitário de saudação", Long: "Um utilitário simples para saudar o usuário", Run: func(cmd *cobra.Command, args []string) { name, _ := cmd.Flags().GetString("name") if name == "" { name = "mundo" } fmt.Printf("Olá, %s!", name) }, }

rootCmd.Flags().StringP("name", "n", "", "Nome do usuário")

if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) }}


Ao executar este programa com a flag --name "João", você receberá uma saudação. O Cobra adiciona automaticamente a flag --help e uma formatação de saída elegante.



2. urfave/cli (anteriormente codegangsta/cli)



urfave/cli é o segundo framework mais popular. Ele se destaca por sua API simples e intuitiva, focada na descrição declarativa de comandos. É ideal para projetos pequenos e médios.



Vantagens:

  • Código minimalista e compreensível.
  • Suporte nativo a flags, argumentos e subcomandos.
  • Geração automática de ajuda.
  • Suporte a ações antes e depois da execução do comando (hooks Before/After).


Exemplo de código com urfave/cli:

package main

import ( "fmt" "log" "os"

"github.com/urfave/cli/v2")

func main() { app := &cli.App{ Name: "calculator", Usage: "Calculadora simples", Commands: []*cli.Command{ { Name: "add", Aliases: []string{"a"}, Usage: "Soma de dois números",

Recommendations