Aller au contenu

Développement d'applications en ligne de commande#

Création de commandes, arguments et flags avec Cobra#

  • Cobra est une bibliothèque Go (golang) qui facilite la création d'applications en ligne de commande (CLI).
  • La création d'une commande Cobra nécessite la définition d'une structure Command. Par exemple :
import "github.com/spf13/cobra"

var maCommande = &cobra.Command{
  Use:   "maCommande",
  Short: "Description courte de maCommande",
  Long:  `Description plus détaillée de maCommande`,
  Run: func(cmd *cobra.Command, args []string) {
    // Code à exécuter lorsque maCommande est appelée
  },
}
  • Les arguments passés à une commande sont disponibles dans la fonction Run à travers le paramètre args.
  • Cobra fournit également une interface pour définir des drapeaux (flags). Par exemple, pour ajouter un flag verbose à notre commande :
maCommande.Flags().BoolP("verbose", "v", false, "Augmente la verbosité de l'output")

Gestion des sous-commandes#

  • Cobra permet de structurer votre application en utilisant des sous-commandes. Chaque sous-commande peut avoir ses propres arguments et flags.
  • Pour ajouter une sous-commande à une commande existante, utilisez la méthode AddCommand. Par exemple :
var sousCommande = &cobra.Command{ /*...*/ }
maCommande.AddCommand(sousCommande)
  • Les sous-commandes peuvent avoir leurs propres sous-commandes, ce qui permet de créer une structure d'application en arborescence.

Utilisation de Cobra pour lire la configuration de l'application#

  • Cobra s'intègre facilement avec Viper, une autre bibliothèque Go qui gère la configuration des applications.
  • Viper permet de lire la configuration à partir de diverses sources, comme des fichiers JSON, TOML, YAML, HCL, INI, des variables d'environnement, des arguments de ligne de commande, etc.
  • Pour lier les flags d'une commande Cobra à une configuration Viper, utilisez la méthode BindPFlag. Par exemple :
import "github.com/spf13/viper"

maCommande.Flags().BoolP("verbose", "v", false, "Augmente la verbosité de l'output")
viper.BindPFlag("verbose", maCommande.Flags().Lookup("verbose"))
  • Viper lira alors la configuration à partir du flag CLI si présent, sinon à partir des autres sources configurées.
  • Cela permet une grande flexibilité dans la configuration de votre application, tout en fournissant une interface CLI cohérente grâce à Cobra.