Guía completa de cobra/pflag para Go: ejemplos y uso

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

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).

Recommendations