Frameworks CLI pour Go (Golang) : guide détaillé
Go (Golang) est un langage idéal pour créer des outils en ligne de commande (CLI). Grâce à sa compilation rapide, sa prise en charge intégrée de la concurrence et sa distribution simple sous forme d'un seul fichier binaire, Go est devenu le standard de facto pour le développement d'applications CLI. Cependant, pour créer des interfaces en ligne de commande complexes, pratiques et évolutives, la bibliothèque standard flag seule est souvent insuffisante. C'est là que des frameworks spécialisés viennent à la rescousse. Dans cet article, nous examinerons en détail les trois frameworks CLI les plus populaires pour Go : Cobra, urfave/cli et Kong, nous comparerons leurs fonctionnalités et montrerons des exemples d'utilisation.
Pourquoi utiliser un framework CLI ?
Développer une application CLI à partir de zéro peut rapidement devenir chaotique, surtout lorsqu'il s'agit de :
- La prise en charge de commandes imbriquées (sous-commandes) et de drapeaux.
- La génération automatique d'aide (
--help). - La gestion des erreurs et la validation des arguments.
- L'auto-complétion (bash/zsh completion).
Les frameworks résolvent ces problèmes en fournissant une architecture prête à l'emploi et un ensemble d'outils.
1. Cobra — le roi du CLI en Go
Cobra est le framework le plus populaire pour créer des CLI en Go. Il est utilisé par des géants comme Kubernetes, Hugo, Docker et GitHub CLI. Cobra est construit sur le concept de commandes, d'arguments et de drapeaux.
Fonctionnalités principales de Cobra :
- Commandes et sous-commandes : Toute action est une commande (
app serve,app init). - Drapeaux : Globaux (
--verbose) et locaux à la commande. - Aide automatique : Générée à partir des descriptions des commandes.
- Auto-complétion : Prise en charge intégrée pour bash, zsh, fish et PowerShell.
- Générateur de code : L'utilitaire
cobra-clicrée le squelette du projet.
Exemple de code avec 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()}Exécution : go run main.go hello --name=PythonLib affichera Hello, PythonLib!.
2. urfave/cli — simplicité et minimalisme
Anciennement connu sous le nom de codegangsta/cli, ce framework est réputé pour sa simplicité et son API élégante. Il convient parfaitement aux projets de petite et moyenne envergure qui n'ont pas besoin de toute la puissance de Cobra.
Caractéristiques clés d'urfave/cli :
- Style déclaratif : L'application est décrite comme une structure de données.
- Génération automatique d'aide : Belle et lisible.
- Prise en charge des actions : Chaque commande a sa propre fonction de gestion.
- Types de drapeaux intégrés : Chaînes, nombres, booléens, durées et même fichiers.
Exemple de code avec 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 Aussi dans la bibliothèque
Clap pour Rust : guide complet avec exemples
Gson pour Java : guide complet avec exemples
Journalisation pour Swift (iOS/macOS) : meilleures bibliothèques et solutions
Travailler avec Kafka en TypeScript : la bibliothèque KafkaJS pour Node.js
Géolocalisation et cartes en Swift pour iOS/macOS : guide complet