HETIC-MT-P2021 / framework_project

Year project for MT5
https://drive.google.com/drive/folders/1_r9GoeCJzVe4UrsPs_B-FKCA3Pm8TcWm?usp=sharing
MIT License
4 stars 1 forks source link

[Research] CLI developement #18

Open Akecel opened 3 years ago

Akecel commented 3 years ago

Guider le dev, mettre en place un affichage de monitoring au lancement du serveur

fredgoum commented 3 years ago

CLI Development

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.

Créer le programme

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) { },
}

Ajouter des commandes

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.

Lancer le programme

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.

Sources :

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/

jibe0123 commented 3 years ago

We can take reference with the fiber CLI https://github.com/gofiber/cli

They are using cobra, but we can take some inspirations about.