Frameworks CLI pour Go : Cobra, Urfave/cli et Bubble Tea

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

Frameworks CLI pour Go : des utilitaires simples aux interfaces TUI



Go (Golang) est devenu le langage n°1 pour créer des utilitaires console et des outils DevOps. Grâce à une compilation rapide, une prise en charge intégrée de la concurrence et une distribution simple (un seul fichier binaire), Go est idéal pour la CLI. Cependant, écrire un analyseur d'arguments, une gestion des erreurs et un affichage coloré à partir de zéro est une tâche laborieuse. Les frameworks CLI viennent à la rescousse. Dans cet article, nous analyserons trois outils clés : Cobra, urfave/cli et Bubble Tea.



1. Cobra — la norme de l'industrie



Cobra (github.com/spf13/cobra) est le framework le plus populaire pour Go. Il est utilisé par Kubernetes, Hugo, Docker, GitHub CLI. Cobra fournit un puissant générateur de commandes, des sous-commandes imbriquées, l'autocomplétion pour bash/zsh/fish et une intégration avec Viper (gestion des configurations).



Installation

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


Exemple : application simple avec sous-commandes

package main

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

func main() { var rootCmd = &cobra.Command{ Use: "app", Short: "Exemple d'application avec Cobra", Run: func(cmd *cobra.Command, args []string) { fmt.Println("Gestionnaire racine exécuté") }, }

var helloCmd = &cobra.Command{ Use: "hello [name]", Short: "Saluer l'utilisateur", Args: cobra.MinimumNArgs(1), Run: func(cmd *cobra.Command, args []string) { fmt.Printf("Bonjour, %s!", args[0]) }, }

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


Fonctionnalités clés :

  • Génération automatique de l'aide (--help)
  • Prise en charge des flags (persistants, locaux)
  • Validation des arguments
  • Génération de scripts d'autocomplétion
  • Intégration avec Viper pour la configuration


2. Urfave/cli — simplicité et flexibilité



Urfave/cli (github.com/urfave/cli/v2) est une alternative légère à Cobra. Le framework est déclaratif : vous décrivez les commandes, les flags et les actions dans des structures. Idéal pour les utilitaires petits et moyens.



Installation

go get github.com/urfave/cli/v2


Exemple : utilitaire de gestion de fichiers

package main

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

func main() { app := &cli.App{ Name: "fileutil", Usage: "utilitaire de gestion de fichiers", Commands: []*cli.Command{ { Name: "read", Aliases: []string{"r"}, Usage: "lire un fichier", Action: func(cCtx *cli.Context) error { if cCtx.NArg() == 0 { return fmt.Errorf("spécifiez le nom du fichier") } data, _ := os.ReadFile(cCtx.Args().First()) fmt.Println(string(data)) return nil }, }, { Name: "write", Aliases: []string{"w"}, Usage: "écrire une chaîne dans un fichier", Flags: []cli.Flag{ &cli.StringFlag{ Name: "content", Aliases: []string{"c"}, Usage: "contenu à écrire", }, }, Action: func(cCtx *cli.Context) error { content := cCtx.String("content") if content == "" { return fmt.Errorf("spécifiez --content") } return os.WriteFile(cCtx.Args().First(), []byte(content), 0644) }, }, }, }

if err := app.R

Recommendations