Frameworks CLI para Go (Golang): revisión completa y comparación

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): guía detallada



Go (Golang) es un lenguaje ideal para crear herramientas de línea de comandos (CLI). Gracias a su compilación rápida, soporte integrado para concurrencia y distribución sencilla como un único archivo binario, Go se ha convertido en el estándar de facto para el desarrollo de aplicaciones CLI. Sin embargo, para crear interfaces de línea de comandos complejas, cómodas y escalables, la biblioteca estándar flag a menudo no es suficiente. Aquí es donde entran en juego los frameworks especializados. En este artículo, analizaremos en detalle los tres frameworks CLI más populares para Go: Cobra, urfave/cli y Kong, compararemos sus capacidades y mostraremos ejemplos de uso.



¿Por qué usar un framework CLI?

Desarrollar una aplicación CLI desde cero puede convertirse rápidamente en un caos, especialmente cuando se trata de:

  • Soporte para comandos anidados (subcomandos) y flags.
  • Generación automática de ayuda (--help).
  • Manejo de errores y validación de argumentos.
  • Autocompletado (bash/zsh completion).

Los frameworks resuelven estos problemas proporcionando una arquitectura lista y un conjunto de herramientas.



1. Cobra — el rey de CLI en Go

Cobra es el framework más popular para crear CLI en Go. Es utilizado por gigantes como Kubernetes, Hugo, Docker y GitHub CLI. Cobra está construido sobre el concepto de comandos, argumentos y flags.



Características principales de Cobra:

  • Comandos y subcomandos: Cualquier acción es un comando (app serve, app init).
  • Flags: Globales (--verbose) y locales para el comando.
  • Ayuda automática: Se genera a partir de las descripciones de los comandos.
  • Autocompletado: Soporte integrado para bash, zsh, fish y PowerShell.
  • Generador de código: La utilidad cobra-cli crea el esqueleto del proyecto.


Ejemplo de código con 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()}

Ejecución: go run main.go hello --name=PythonLib mostrará Hello, PythonLib!.



2. urfave/cli — simplicidad y minimalismo

Anteriormente conocido como codegangsta/cli, este framework es famoso por su simplicidad y su API elegante. Es perfecto para proyectos pequeños y medianos donde no se necesita toda la potencia de Cobra.



Características clave de urfave/cli:

  • Estilo declarativo: La aplicación se describe como una estructura de datos.
  • Generación automática de ayuda: Bonita y legible.
  • Soporte para acciones: Cada comando tiene su propia función de controlador.
  • Tipos de flags integrados: Cadenas, números, valores booleanos, duración e incluso archivos.


Ejemplo de código con 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