Frameworks CLI para Go (Golang): revisión completa de herramientas para crear aplicaciones de consola

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Frameworks CLI para Go (Golang): creando aplicaciones de consola profesionales



Go (Golang) es considerado merecidamente uno de los mejores lenguajes para crear utilidades de consola. Gracias a su compilación rápida, soporte integrado de concurrencia y un conveniente sistema de paquetes, en Go se han escrito herramientas legendarias como Docker, Kubernetes, Hugo y Terraform. Sin embargo, para crear una CLI (Command Line Interface) realmente cómoda y flexible, a menudo se requiere no solo la biblioteca estándar flag, sino también frameworks especializados. En este artículo, analizaremos en detalle los mejores frameworks CLI para Go, sus capacidades, ventajas y ejemplos de uso.



¿Por qué necesito un framework CLI?



La biblioteca estándar flag maneja bien tareas simples, pero cuando su proyecto crece, surgen necesidades de:

  • Soporte de subcomandos anidados, como en git commit o docker run.
  • Generación automática de ayuda y páginas man.
  • Autocompletado (bash/zsh/fish completion).
  • Análisis de banderas y argumentos complejos.
  • Modo de trabajo interactivo (TUI).

Para estas tareas existen los frameworks CLI.



1. Cobra — el rey de CLI en Go



Cobra es el framework más popular para crear CLI en Go. Se utiliza en Kubernetes, Hugo, GitHub CLI y muchos otros proyectos. Cobra proporciona una interfaz potente para crear comandos, banderas y argumentos.



Características clave:

  • Creación sencilla de subcomandos anidados.
  • Generación automática de ayuda y páginas man.
  • Soporte de autocompletado para bash, zsh, fish y PowerShell.
  • Integración con Viper (gestor de configuraciones).
  • Generación del esqueleto del proyecto mediante cobra-cli init.


Ejemplo de código con Cobra:

package main

import ( "fmt" "os"

"github.com/spf13/cobra")

func main() { var rootCmd = &cobra.Command{ Use: "greet", Short: "Utilidad de saludo", Long: "Una utilidad simple para saludar al usuario", Run: func(cmd *cobra.Command, args []string) { name, _ := cmd.Flags().GetString("name") if name == "" { name = "mundo" } fmt.Printf("¡Hola, %s!", name) }, }

rootCmd.Flags().StringP("name", "n", "", "Nombre del usuario")

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


Al ejecutar este programa con la bandera --name "Juan", obtendrá un saludo. Cobra agregará automáticamente la bandera --help y un bonito formato de salida.



2. urfave/cli (anteriormente codegangsta/cli)



urfave/cli es el segundo framework más popular. Se distingue por su API simple e intuitiva, orientada a la descripción declarativa de comandos. Es ideal para proyectos pequeños y medianos.



Ventajas:

  • Código minimalista y comprensible.
  • Soporte integrado de banderas, argumentos y subcomandos.
  • Generación automática de ayuda.
  • Soporte de acciones antes y después de la ejecución del comando (hooks Before/After).


Ejemplo de código con urfave/cli:

package main

import ( "fmt" "log" "os"

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

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

Recommendations