Open Akecel opened 3 years ago
Ce document décrit comment créer une CLI en golang avec la librairie Cobra.
La CLI permettra de :
Pour créer une CLI en go, on peut utiliser la bibliothèque go standard (qui comprend un package flags, qui peut être utilisé pour analyser des indicateurs dans les lignes de code).
Mais, il existe des bibliothèques pour créer des CLI plus complètes. La bibliothèque qui correspond au mieux, dans le cas de l'application CLI est Cobra.
Cobra est à la fois une bibliothèque pour créer des applications CLI modernes et un programme pour générer des applications et des fichiers bash.
Nous allons commencer par créer notre application avec Cobra
# Create a go module for CLI.
$ go mod init greetctl
# Get Cobra library
$ go get -u github.com/spf13/cobra/cobra
# Create a bare minimum skeleton
$ cobra init --pkg-name greetctl
L'application est initialisée, avec un fichier main.go et un package cmd/ qui contiendra les commandes.
$ tree
.
├── cmd
│ └── root.go
├── LICENSE
└── main.go
1 directory, 3 files
Nous pouvons modifier le fichier cmd/root.go, pour afficher des informations à l'exécution de la CLI.
// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "greetctl",
Short: "A brief description of your application",
Long: `A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}
Maintenant, nous pouvons ajouter des commandes à notre CLI. Pour cela, nous allons utiliser la commande cobra add
$ cobra add start
$ tree
.
├── cmd
│ ├── root.go
│ └── start.go
├── LICENSE
└── main.go
Notez que les commandes doivent être en camelCase.
A ce stade, on peut lancer notre CLI, en exécutant la commande go run main.go.
$ go run main.go
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:
Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.
Usage:
greetctl [command]
Available Commands:
completion generate the autocompletion script for the specified shell
help Help about any command
start A brief description of your command
Flags:
--config string config file (default is $HOME/.greetctl.yaml)
-h, --help help for greetctl
-t, --toggle Help message for toggle
Use "greetctl [command] --help" for more information about a command.
Puis, go run main.go start pour exécuter la commande de démarrage :
$ go run main.go start
start called
D'autres commandes de la CLI pourront être créées, avec le même principe que la commande de démarrage.
https://dzone.com/articles/how-to-create-a-cli-in-go-in-few-minutes
https://blog.knoldus.com/create-kubectl-like-cli-with-go-and-cobra/
https://github.com/spf13/cobra
https://blog.alexellis.io/5-keys-to-a-killer-go-cli/
We can take reference with the fiber CLI https://github.com/gofiber/cli
They are using cobra, but we can take some inspirations about.
Guider le dev, mettre en place un affichage de monitoring au lancement du serveur