Aller au contenu

Développement d'applications en ligne de commande#

Présentation de Cobra et ses avantages#

  • Cobra est une bibliothèque (library) Go dédiée à la création d'applications en ligne de commande (Command-Line Interface, CLI) robustes et flexibles.
  • Il offre une interface simple pour créer des commandes puissantes, des sous-commandes, ainsi que des drapeaux (flags) pour ces commandes.
  • Cobra est largement adopté dans l'écosystème Go, par des projets tels que Kubernetes, Hugo, et Docker, pour n'en nommer que quelques-uns.
  • Il est remarquable pour ses fonctionnalités avancées, comme le support pour des suggestions de commandes, la génération automatique de documentation, et une bonne prise en charge de l'ancrage des commandes.

Installation et configuration de Cobra#

  • Vous pouvez installer Cobra directement avec la commande Go : go get github.com/spf13/cobra/cobra
  • Ensuite, vous pouvez utiliser le générateur Cobra pour créer votre application CLI de base avec la commande : cobra init --pkg-name <nom_de_votre_package>
  • Ce qui vous donne une structure de base pour votre application CLI avec un main.go, un fichier de commandes root, et des dossiers pour les commandes et les drapeaux.

Structure de base d'une application CLI avec Cobra#

  • Une application Cobra est constituée de commandes, de sous-commandes et de drapeaux associés.
  • Chaque commande correspond à une action de votre application. Par exemple, dans une application de gestion de fichiers, vous pourriez avoir des commandes telles que create, read, update, delete.
  • Les sous-commandes représentent des actions plus spécifiques. Par exemple, avec la commande read, vous pourriez avoir des sous-commandes comme read textfile, read image.
  • Les drapeaux vous permettent de personnaliser davantage ces actions. Par exemple, avec la commande create textfile, vous pourriez avoir un drapeau --uppercase qui force le texte à être en majuscules.
  • Dans Cobra, chaque commande est représentée par une instance du struct cobra.Command. Les sous-commandes sont simplement des instances de cobra.Command attachées à leur commande parente avec la méthode AddCommand().
  • Les drapeaux sont ajoutés à ces commandes avec les méthodes PersistentFlags() ou Flags().
  • Un exemple de code montrant la structure de base d'une application CLI avec Cobra serait :
package main

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

func main() {
    var cmdPrint = &cobra.Command{
        Use:   "print [string to print]",
        Short: "Print anything to the screen",
        Args:  cobra.MinimumNArgs(1),
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println(args[0])
        },
    }

    var rootCmd = &cobra.Command{Use: "myapp"}
    rootCmd.AddCommand(cmdPrint)
    rootCmd.Execute()
}

Cette application permet d'imprimer du texte sur la console avec la commande myapp print [texte].