Librería cobra/pflag para Go: potentes flags de línea de comandos
En el desarrollo con Go, crear interfaces de línea de comandos (CLI) cómodas y flexibles es una tarea clave. La librería estándar flag ofrece funciones básicas para analizar flags, pero su alcance es limitado. Aquí entra cobra/pflag, una potente librería que amplía las capacidades del paquete estándar y es una pieza fundamental del ecosistema Cobra (el popular framework para crear aplicaciones CLI).
La principal ventaja de pflag frente al flag estándar es su soporte para estilos de flags tanto POSIX/GNU (flags largos con doble guión, como --verbose) como BSD (flags cortos con un solo guión, como -v). La librería también permite combinar flags cortos (-abc en lugar de -a -b -c), flags con argumentos obligatorios, flags contadores y mucho más. pflag es totalmente compatible con la interfaz flag.Value, lo que facilita migrar código existente.
Esta librería se usa activamente en proyectos conocidos como Kubernetes, Helm, Hugo y muchos otros. Si planeas crear una aplicación CLI seria en Go, pflag será una herramienta indispensable, ofreciendo flexibilidad, rendimiento y conformidad con los estándares modernos de línea de comandos.
Instalación
La instalación de la librería se realiza de la forma estándar en Go a través del gestor de paquetes go get:
go get github.com/spf13/pflag
Después de ejecutar este comando, la librería se añadirá a tu módulo Go (archivo go.mod). Ahora puedes importarla en tu código:
import "github.com/spf13/pflag"
Inicio rápido
Vamos a crear una aplicación simple que recibe un nombre de usuario y un flag para mostrar un saludo:
package main
import (
"fmt"
"github.com/spf13/pflag"
)
func main() {
// Definimos los flags
name := pflag.String("name", "Mundo", "nombre para el saludo")
verbose := pflag.BoolP("verbose", "v", false, "salida detallada")
// Analizamos los flags
pflag.Parse()
// Usamos los valores
if *verbose {
fmt.Printf("Modo: detallado\n")
fmt.Printf("Nombre: %s\n", *name)
}
fmt.Printf("¡Hola, %s!\n", *name)
}
Ejecuta el programa con diferentes flags:
go run main.go
go run main.go --name=Go
go run main.go -n Go -v
go run main.go --verbose --name "Desarrollador Go"
Métodos y funciones principales
1. pflag.String(name, shorthand, value, usage)
Firma: func String(name string, shorthand string, value string, usage string) *string
Crea un flag de tipo cadena con el nombre, forma corta, valor por defecto y descripción especificados. Devuelve un puntero a una cadena.
host := pflag.StringP("host", "H", "localhost", "dirección del servidor")
pflag.Parse()
fmt.Printf("Conectando a %s\n", *host)
2. pflag.Int(name, shorthand, value, usage)
Firma: func Int(name string, shorthand string, value int, usage string) *int
Crea un flag de tipo entero. Útil para especificar puertos, límites y otros parámetros numéricos.
port := pflag.IntP("port", "p", 8080, "puerto de escucha")
pflag.Parse()
fmt.Printf("Servidor iniciado en el puerto %d\n", *port)
3. pflag.Bool(name, shorthand, value, usage)
Firma: func Bool(name string, shorthand string, value bool, usage string) *bool
Crea un flag de tipo booleano. Flags de tipo interruptor que no requieren un valor (su simple presencia indica true).
También en la biblioteca
Generación de informes PDF en JavaScript (Node.js): Resumen de bibliotecas y ejemplos de código
Cliente Redis para C# (.NET): StackExchange.Redis — conexión y ejemplos
Firebase Android SDK para Kotlin: guía completa con ejemplos
Envío de SMS en C++: API de las bibliotecas libcurl y cpprestsdk