cobra/pflag pour Go : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque cobra/pflag pour Go : des flags de ligne de commande puissants

Dans le monde du développement Go, créer des interfaces en ligne de commande (CLI) flexibles et intuitives est essentiel. La bibliothèque standard flag offre des fonctionnalités de base pour analyser les flags, mais ses capacités sont limitées. Heureusement, cobra/pflag vient à la rescousse : une bibliothèque robuste qui étend les possibilités du package standard et fait partie intégrante de l'écosystème Cobra (le framework populaire pour créer des applications CLI).

Le principal avantage de pflag par rapport au flag standard est sa prise en charge des styles de flags POSIX/GNU (flags longs avec double tiret, comme --verbose) et BSD (flags courts avec un seul tiret, comme -v). La bibliothèque supporte également la combinaison de flags courts (-abc au lieu de -a -b -c), les flags avec arguments obligatoires, les flags compteurs et bien plus encore. pflag est totalement compatible avec l'interface flag.Value, ce qui facilite la migration du code existant.

Cette bibliothèque est activement utilisée dans des projets renommés tels que Kubernetes, Helm, Hugo et bien d'autres. Si vous prévoyez de développer une application CLI sérieuse en Go, pflag sera un outil indispensable, offrant flexibilité, performance et conformité aux standards modernes des interfaces en ligne de commande.

Installation

L'installation de la bibliothèque se fait de manière standard pour Go via le gestionnaire de paquets go get :

go get github.com/spf13/pflag

Après avoir exécuté cette commande, la bibliothèque sera ajoutée à votre module Go (fichier go.mod). Vous pouvez maintenant l'importer dans votre code :

import "github.com/spf13/pflag"

Démarrage rapide

Créons une application simple qui accepte un nom d'utilisateur et un flag d'affichage du message de bienvenue :

package main

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

func main() {
    // Définir les flags
    name := pflag.String("name", "Monde", "nom pour le message de bienvenue")
    verbose := pflag.BoolP("verbose", "v", false, "affichage détaillé")
    
    // Analyser les flags
    pflag.Parse()
    
    // Utiliser les valeurs
    if *verbose {
        fmt.Printf("Mode : détaillé\n")
        fmt.Printf("Nom : %s\n", *name)
    }
    
    fmt.Printf("Bonjour, %s !\n", *name)
}

Exécutez le programme avec différents flags :

go run main.go
go run main.go --name=Go
go run main.go -n Go -v
go run main.go --verbose --name "Développeur Go"

Méthodes et fonctions principales

1. pflag.String(name, shorthand, value, usage)

Signature : func String(name string, shorthand string, value string, usage string) *string

Crée un flag de type chaîne de caractères avec le nom, la forme courte, la valeur par défaut et la description spécifiés. Retourne un pointeur vers une chaîne.

host := pflag.StringP("host", "H", "localhost", "adresse du serveur")
pflag.Parse()
fmt.Printf("Connexion à %s\n", *host)

2. pflag.Int(name, shorthand, value, usage)

Signature : func Int(name string, shorthand string, value int, usage string) *int

Crée un flag de type entier. Utile pour spécifier des ports, des limites et d'autres paramètres numériques.

port := pflag.IntP("port", "p", 8080, "port d'écoute")
pflag.Parse()
fmt.Printf("Serveur démarré sur le port %d\n", *port)

3. pflag.Bool(name, shorthand, value, usage)

Signature : func Bool(name string, shorthand string, value bool, usage string) *bool

Crée un flag de type booléen. Des flags interrupteurs qui ne nécessitent pas de valeur (simple présence du flag pour l'activer).

Recommendations