Frameworks CLI para Go: Cobra, Urfave/cli y Bubble Tea

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: desde utilidades simples hasta interfaces TUI



Go (Golang) se ha convertido en el lenguaje número uno para crear utilidades de consola y herramientas DevOps. Gracias a su compilación rápida, soporte integrado de concurrencia y distribución simple (un solo archivo binario), Go es ideal para CLI. Sin embargo, escribir un analizador de argumentos, manejo de errores y salida de colores desde cero es una tarea laboriosa. Los frameworks CLI vienen al rescate. En este artículo, analizaremos tres herramientas clave: Cobra, urfave/cli y Bubble Tea.



1. Cobra — el estándar de la industria



Cobra (github.com/spf13/cobra) es el framework más popular para Go. Lo utilizan Kubernetes, Hugo, Docker, GitHub CLI. Cobra proporciona un potente generador de comandos, subcomandos anidados, autocompletado para bash/zsh/fish e integración con Viper (gestión de configuraciones).



Instalación

go get -u github.com/spf13/cobra/cobra


Ejemplo: aplicación simple con subcomandos

package main

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

func main() { var rootCmd = &cobra.Command{ Use: "app", Short: "Ejemplo de aplicación en Cobra", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Manejador raíz ejecutado") }, }

var helloCmd = &cobra.Command{ Use: "hello [name]", Short: "Saludar al usuario", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { fmt.Printf("¡Hola, %s!", args[0]) }, }

rootCmd.AddCommand(helloCmd) rootCmd.Execute()}


Características clave:

  • Generación automática de ayuda (--help)
  • Soporte de banderas (persistentes, locales)
  • Validación de argumentos
  • Generación de scripts de autocompletado
  • Integración con Viper para configuración


2. Urfave/cli — simplicidad y flexibilidad



Urfave/cli (github.com/urfave/cli/v2) es una alternativa ligera a Cobra. El framework es declarativo: describes comandos, banderas y acciones en estructuras. Ideal para utilidades pequeñas y medianas.



Instalación

go get github.com/urfave/cli/v2


Ejemplo: utilidad para trabajar con archivos

package main

import ( "fmt" "log" "os" "github.com/urfave/cli/v2")

func main() { app := &cli.App{ Name: "fileutil", Usage: "utilidad para trabajar con archivos", Commands: []*cli.Command{ { Name: "read", Aliases: []string{"r"}, Usage: "leer un archivo", Action: func(cCtx *cli.Context) error { if cCtx.NArg() == 0 { return fmt.Errorf("especifique el nombre del archivo") } data, _ := os.ReadFile(cCtx.Args().First()) fmt.Println(string(data)) return nil }, }, { Name: "write", Aliases: []string{"w"}, Usage: "escribir una cadena en un archivo", Flags: []cli.Flag{ &cli.StringFlag{ Name: "content", Aliases: []string{"c"}, Usage: "contenido a escribir", }, }, Action: func(cCtx *cli.Context) error { content := cCtx.String("content") if content == "" { return fmt.Errorf("especifique --content") } return os.WriteFile(cCtx.Args().First(), []byte(content), 0644) }, }, }, }

if err := app.R

Recommendations