Comment utiliser le package Cobra dans Go
Introduction
Les applications d'interface de ligne de commande (CLI) sont des programmes logiciels qui s'exécutent sur des terminaux ou des invites de commande. L'utilisateur interagit avec le logiciel en spécifiant des commandes et en recevant du texte en guise de retour.
Les CLI sont anciennes mais très populaires pour leur polyvalence, leur portabilité et leur rapidité. Les CLI sont couramment utilisées pour diverses tâches allant du traitement de texte aux tâches d'administration de systèmes complexes afin d'économiser du temps et des efforts.
Il existe de nombreux outils que vous pouvez utiliser pour créer des applications en ligne de commande dans Go. Par exemple, vous pouvez travailler avec le package flag
intégré à Go ou recourir à des packages tiers populaires comme le package Cobra.
Dans ce didacticiel, vous apprendrez à créer des CLI dans Go avec le package Cobra populaire. Ensuite, vous créerez une application CLI qui affichera le fuseau horaire dans un emplacement spécifié.
Conditions préalables
Vous devrez remplir certaines conditions pour bien comprendre les concepts et suivre ce didacticiel.
-
Vous disposez d’une version récente du SDK Go installée sur votre ordinateur. Voici un didacticiel pas à pas que vous pouvez suivre pour faciliter le processus d'installation.
Vous avez de l'expérience avec le langage de programmation Go. Consultez cette ressource pour commencer à écrire du code Go.
Étape 1 - Configuration de votre environnement de développement
Dans cette étape, vous apprendrez à configurer votre environnement de développement Go pour commencer à créer une application Cobra-cli.
La configuration d'un environnement de développement Go est simple. Une fois que vous avez installé le SDK Go, créez un nouveau répertoire et écrivez le code Go.
Exécutez cette commande sur votre terminal pour vérifier votre installation Go.
go version
La commande affiche la version du SDK Go que vous avez installée sur votre ordinateur.
go version go1.20.1 darwin/arm64
Vous devrez créer un nouveau répertoire pour votre application CLI et initialiser le répertoire pour un nouveau projet Go avec la commande go mod
.
Exécutez ces commandes sur votre terminal pour créer et initialiser un nouveau projet pour l'application CLI sur votre ordinateur.
mkdir CobraDigitalOcean && cd CobraDigitalOcean
go mod init CobraDigitalOcean
La commande go mod initialise un nouveau projet dans le répertoire de travail spécifié. La commande crée également un fichier go.mod dans le répertoire de gestion des dépendances de votre projet.
go: creating a new go.mod: module CobraDigitalOcean
Au cours de cette étape, vous avez initialisé avec succès un projet Go pour votre application CLI.
Étape 2 - Démarrer le package Cobra
Dans cette étape, vous apprendrez comment démarrer avec le package Cobra pour créer des applications CLI.
Cobra (Cobra-cli) est un package populaire dans l'écosystème Go qui fournit un cadre robuste et complet pour créer des applications de ligne de commande modernes. Le package Cobra offre de nombreuses fonctionnalités qui simplifient la création d'applications en ligne de commande dans Go.
Le package Cobra-cli est construit sur le package flag
de la bibliothèque standard, offrant un niveau d'abstraction plus élevé tout en ajoutant plus de fonctionnalités. Cobra-cli offre des fonctionnalités telles que la hiérarchie des commandes, l'analyse des indicateurs et des arguments et des sous-commandes, entre autres, pour faciliter le développement d'applications CLI complexes et riches en fonctionnalités.
Les applications CLI populaires telles que Kubernetes, Hugo, CockroachDB et Traefik sont écrites en Go avec le package Cobra.
Vous pouvez exécuter cette commande dans le terminal du répertoire de travail de votre projet pour installer le package Cobra-cli.
go install github.com/spf13/cobra-cli@latest
La commande installe le package Cobra-cli
en tant qu'exécutable CLI.
Après avoir installé le package, vous pouvez initialiser un projet Cobra CLI avec la commande init
de l'outil de ligne de commande.
cobra-cli init
La commande init
crée des fichiers dans le répertoire de travail de votre projet qui contiennent du code passe-partout pour le package Cobra avec le nom de votre package.
Your Cobra application is ready at
/Users/chukwuemeriwoukeje/go/src/CobraDigitalOcean/CobraDigitalOcean
Vous pouvez créer votre nouvel outil Cobra CLI avec la commande build
de l'outil CLI go
. La commande génère un fichier exécutable dans le répertoire de travail de votre projet.
go build
Vous devez installer votre package CLI avec la commande install
pour accéder aux modifications et interagir avec votre application CLI.
go install
Après avoir installé votre application de projet CLI, vous pouvez exécuter l'outil avec des commandes pour tester l'outil et ses fonctionnalités.
CobraDigitalOcean.
La commande doit renvoyer l'utilisation du fichier généré.
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.
La sortie de la commande pour le moment a été générée par l'outil Cobra-cli. Vous pouvez modifier le fichier root.go
pour modifier la sortie.
Vous avez installé avec succès le package Cobra et initialisé une application Cobra CLI au cours de cette étape.
Étape 3 - Récupération de l'heure dans un fuseau horaire avec le package Time
Dans cette étape, vous apprendrez à utiliser le package time
pour récupérer l'heure dans un fuseau horaire.
Étant donné que l'application CLI affiche l'heure dans un fuseau horaire, vous aurez besoin d'une fonction qui renvoie l'heure d'un fuseau horaire.
Le package time
intégré de Go fournit des fonctionnalités permettant de travailler avec différents fuseaux horaires. Vous pouvez utiliser la fonction LoadLocation
du package time
pour charger les données de localisation à partir d'une chaîne de fuseau horaire et accéder à l'heure de l'emplacement avec le In
fonction de la fonction Maintenant
du package horaire.
Créez un fichier time.go
avec cette commande dans le répertoire cmd
.
cd cmd && touch time.go
La commande navigue dans le dossier cmd
et crée le fichier time.go
.
Voici la fonction qui acceptera une chaîne de fuseau horaire et renverra l'heure dans ce fuseau horaire.
package time
import "time"
func getTimeInTimezone(timezone string) (string, error) {
location, err := time.LoadLocation(timezone)
if err != nil {
return ", err
}
currentTime := time.Now().In(location)
return currentTime.Format(time.RFC1123), nil
}
Le programme importe le package time
pour la fonction getTimeInTimezone
. La fonction getTimeInTimezone
prend une chaîne de fuseau horaire et renvoie l'heure actuelle au format chaîne et une erreur.
La fonction Format
de l'instance d'heure actuelle formate l'heure selon la norme RFC1123.
Dans cette étape, vous avez configuré la fonction qui renvoie l'heure dans un fuseau horaire avec le package time
.
Étape 4 - Ajout de commandes à vos applications Cobra
Dans cette étape, vous apprendrez comment ajouter des commandes à vos applications Cobra CLI.
Vous pouvez ajouter des commandes à votre application CLI avec la commande add
de Cobra-cli. Vous devrez spécifier le nom de la commande comme argument supplémentaire.
Exécutez cette commande sur le terminal de votre projet Cobra-cli pour ajouter une commande nommée timezone à votre application.
cobra-cli add timezone
La commande doit créer un fichier dans le dossier cmd
où existe le root.go
, et le fichier contiendra un code passe-partout que vous pourrez modifier et exécuter votre application CLI.
timezone created at /Users/chukwuemeriwoukeje/go/src/CobraDigitalOcean/CobraDigitalOcean
Vous allez modifier le fichier en fonction de votre projet CLI. La variable timeZoneCmd
est une instance de la commande cobra. Le champ Use
de la structure Command
spécifie le nom de la commande, et les champs Short
et Long
spécifient court et long. descriptions de la commande.
Le champ Exécuter
est la fonction qui s'exécute lorsque vous exécutez des commandes sur l'application CLI.
Voici la variable timezoneCmd
modifiée avec des champs adaptés à la fonctionnalité de commande de fuseau horaire.
// timezoneCmd represents the timezone command
var timezoneCmd = &cobra.Command{
Use: "timezone",
Short: "Get the current time in a given timezone",
Long: `Get the current time in a given timezone.
This command takes one argument, the timezone you want to get the current time in.
It returns the current time in RFC1123 format.`,
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
timezone := args[0]
currentTime, err := getTimeInTimezone(timezone)
if err != nil {
log.Fatalln("The timezone string is invalid")
}
fmt.Println(currentTime)
},
}
Le programme définit les champs Utiliser
, Short
, Long
et Exécuter
qui conviennent à la fonctionnalité de la fonction de fuseau horaire. La variable timezoneString
est l'argument supplémentaire de la tranche de chaînes args
qui contient des arguments supplémentaires provenant de l'entrée utilisateur.
Exécutez simplement la commande go install
pour créer et installer l'outil CLI à des fins de test.
go install
Exécutez ensuite la commande timezone
avec une chaîne de fuseau horaire.
CobraDigitalOcean timezone EST
Voici le résultat de l’exécution de la commande pour demander l’heure en Amérique (chaîne de fuseau horaire EST)
Sat, 11 Mar 2023 06:57:23 EST
Au cours de cette étape, vous avez appris à appliquer les commandes et leurs fonctionnalités à votre application CLI.
Étape 5 - Ajout d'indicateurs à votre application Cobra
Dans cette étape, vous apprendrez comment ajouter des indicateurs locaux et persistants à votre application CLI.
Les drapeaux sont des options permettant de modifier le comportement des commandes. Un ou deux tirets précèdent généralement les drapeaux (« - » ou « – »). Les indicateurs offrent aux utilisateurs un moyen pratique de modifier le comportement d’une commande sans modifier le code source ni recompiler le programme.
Vous pouvez ajouter des drapeaux dans la fonction init
du fichier de commandes. De plus, cobra fournit des fonctionnalités permettant d'ajouter des indicateurs locaux et persistants à votre application.
Les indicateurs locaux ne sont disponibles que pour la commande dans laquelle ils sont définis. Les indicateurs locaux ne sont pas hérités par les sous-commandes ni disponibles pour les commandes du même niveau.
D'un autre côté, vous pouvez définir des indicateurs persistants au niveau racine d'une commande pour que les sous-commandes en héritent. Ensuite, les sous-commandes de la commande racine peuvent accéder à l'indicateur persistant sans avoir besoin d'une redéfinition.
Dans la fonction init, vous pouvez utiliser la fonction PersistentFlags
de l'instance de commande (timezoneCmd) pour ajouter des indicateurs persistants à votre application. Vous pouvez utiliser la fonction String
de la fonction PersistentFlags
pour ajouter des informations sur l'indicateur.
func init() {
rootCmd.AddCommand(timezoneCmd)
timezoneCmd.PersistentFlags().String("date", "", "returns the date in a time zone in a specified format")
}
De même, vous pouvez ajouter des drapeaux locaux avec la fonction Flags
et utiliser la fonction String
pour ajouter des informations sur le drapeau.
func init() {
rootCmd.AddCommand(timezoneCmd)
timezoneCmd.Flags().String("date", "", "Date for which to get the time (format: yyyy-mm-dd)")
}
Après avoir ajouté des informations pour les indicateurs dans la fonction init
, vous pouvez ajouter des fonctionnalités pour les indicateurs dans la fonction Run
de l'instance de commande.
Vous pouvez accéder aux données des indicateurs avec la fonction Flags
et accéder aux valeurs de chaîne à partir du drapeau avec la fonction GetString
de la fonction Flags
qui prend en compte le le nom du drapeau et renvoie la chaîne et une erreur.
Voici une fonction pour la commande timezone
qui accède à la chaîne à partir de l'indicateur date
et renvoie uniquement la date dans un format spécifié.
Run: func(cmd *cobra.Command, args []string) {
timezone := args[0]
location, _ := time.LoadLocation(timezone)
dateFlag, _ := cmd.Flags().GetString("date")
var date string
if dateFlag != "" {
date = time.Now().In(location).Format(dateFlag)
} else {
date = time.Now().In(location).Format(time.RFC3339)[:10]
}
fmt.Printf("Current date in %v: %v\n", timezone, date)
}
La fonction accède à la commande et à l'indicateur, charge l'emplacement du fuseau horaire avec le package horaire, accède à l'heure dans le fuseau horaire et récupère la date avec les verbes de formatage de chaîne.
Exécutez à nouveau la commande go install
pour mettre à jour les fonctionnalités de votre application CLI.
Voici comment utiliser les indicateurs dans votre application CLI.
CobraDigitalOcean timezone EST --date 2006-01-02
La commande spécifie le format de date comme AAAA-MM-JJ et la sortie doit être la date actuelle dans ce fuseau horaire dans le format prescrit.
[secondary_label Output]
The current date in EST: 2023-03-11
Au cours de cette étape, vous avez appris à ajouter des indicateurs persistants et locaux à votre application CLI.
Conclusion
Vous avez découvert les CLI, le package Cobra, comment travailler avec les fuseaux horaires avec le package time
intégré de Go et comment créer des applications CLI avec l'outil Cobra-cli.
Cobra est essentiel à votre arsenal de développement puisque vous pouvez créer des applications CLI en quelques minutes.