Frameworks CLI para Go (Golang): visão geral completa e comparação

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

CLI frameworks para Go (Golang): guia detalhado



Go (Golang) é uma linguagem ideal para criar ferramentas de linha de comando (CLI). Graças à compilação rápida, suporte embutido para concorrência e distribuição simples como um único arquivo binário, Go se tornou o padrão de facto para o desenvolvimento de aplicações CLI. No entanto, para criar interfaces de linha de comando complexas, convenientes e escaláveis, a biblioteca padrão flag muitas vezes não é suficiente. É aqui que entram os frameworks especializados. Neste artigo, examinaremos detalhadamente os três frameworks CLI mais populares para Go: Cobra, urfave/cli e Kong, compararemos seus recursos e mostraremos exemplos de uso.



Por que usar um framework CLI?

Desenvolver uma aplicação CLI do zero pode rapidamente se transformar em caos, especialmente quando se trata de:

  • Suporte para comandos aninhados (subcommands) e flags.
  • Geração automática de ajuda (--help).
  • Tratamento de erros e validação de argumentos.
  • Autocompletar (bash/zsh completion).

Os frameworks resolvem esses problemas fornecendo uma arquitetura pronta e um conjunto de ferramentas.



1. Cobra — o rei das CLI em Go

Cobra é o framework mais popular para criar CLI em Go. Ele é usado em gigantes como Kubernetes, Hugo, Docker e GitHub CLI. Cobra é construído sobre o conceito de comandos, argumentos e flags.



Principais recursos do Cobra:

  • Comandos e subcomandos: Qualquer ação é um comando (app serve, app init).
  • Flags: Globais (--verbose) e locais para o comando.
  • Ajuda automática: Gerada a partir das descrições dos comandos.
  • Autocompletar: Suporte embutido para bash, zsh, fish e PowerShell.
  • Gerador de código: A utilidade cobra-cli cria o esqueleto do projeto.


Exemplo de código com Cobra:

package main

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

func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Greet is a simple CLI tool", Long: "A simple CLI tool to greet people.", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Hello! Use 'greet hello --name' to greet someone.") }, }

var name string var helloCmd = &cobra.Command{ Use: "hello", Short: "Greet a person", Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Hello, %s!", name) }, }

helloCmd.Flags().StringVarP(&name, "name", "n", "World", "Name to greet") rootCmd.AddCommand(helloCmd) rootCmd.Execute()}

Execução: go run main.go hello --name=PythonLib exibirá Hello, PythonLib!.



2. urfave/cli — simplicidade e minimalismo

Anteriormente conhecido como codegangsta/cli, este framework é famoso por sua simplicidade e API elegante. É ideal para projetos pequenos e médios onde não é necessária toda a potência do Cobra.



Características principais do urfave/cli:

  • Estilo declarativo: A aplicação é descrita como uma estrutura de dados.
  • Geração automática de ajuda: Bonita e legível.
  • Suporte a ações: Cada comando tem sua própria função de tratamento.
  • Tipos de flags embutidos: Strings, números, valores booleanos, duração e até arquivos.


Exemplo de código com urfave/cli:

package main

import ( "fmt" "log" "os"

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

func main() { app := &cli.App{ Name: "calc", Usage: "A simple calculator", Comman

Recommendations