Bonjour, Habr! Je vous présente la traduction de l'article
Un guide pratique des variables d'environnement dans Go par Enda Phelan.
Les variables d'environnement sont le meilleur moyen de stocker les configurations d'application, car elles peuvent être définies au niveau du système. C'est l'un des principes de la méthodologie de l'
application à douze facteurs , il vous permet de séparer les applications du système dans lequel elles s'exécutent (la configuration peut varier considérablement entre les déploiements, le code ne doit pas différer).
Utilisation de variables d'environnement
Tout ce qui est nécessaire pour interagir avec les variables d'environnement se trouve dans la bibliothèque standard
os . Voici comment obtenir la valeur de la variable d'environnement PATH:
package main import ( "fmt" "os" ) func main() {
Et donc - définissez la valeur de la variable:
package main import ( "fmt" "os" ) func main() {
Chargement de variables d'environnement à partir d'un fichier .env
Sur une machine de développement, où de nombreux projets sont lancés immédiatement, le stockage des paramètres dans des environnements variables n'est pas toujours pratique; il serait plus logique de les répartir entre projets à l'aide de fichiers env. Vous pouvez le faire, par exemple, en utilisant
godotenv - c'est le
dotenv porté sur la bibliothèque Go Ruby. Il vous permet de définir les variables d'environnement nécessaires à l'application à partir du fichier .env.
Pour installer le package, exécutez:
go get github.com/joho/godotenv
Ajoutez les paramètres au fichier .env à la racine du projet:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno
Vous pouvez maintenant utiliser ces valeurs dans l'application:
package main import ( "log" "github.com/joho/godotenv" "fmt" "os" )
Il est important de se rappeler que si la valeur de la variable d'environnement est définie au niveau du système, Go utilisera cette valeur au lieu de celle spécifiée dans le fichier env.
Enveloppez les variables d'environnement dans le module de configuration
C’est bien, bien sûr, d’avoir directement accès aux variables d’environnement, comme illustré ci-dessus, mais maintenir une telle solution semble plutôt problématique. Le nom de la variable est une chaîne, et si elle change, imaginez un casse-tête qui entraînera le processus de mise à jour des références de variable dans l'application.
Pour résoudre ce problème, nous allons créer un module de configuration pour travailler avec les variables d'environnement de manière plus centralisée et prise en charge.
Voici un module de
configuration simple qui renvoie les paramètres de configuration dans la structure de
configuration (nous définissons également les valeurs par défaut des paramètres au cas où il n'y aurait pas de variable d'environnement dans le système):
package config import ( "os" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig }
Ensuite, ajoutez les types à la structure
Config , car la solution existante ne prend en charge que les types de chaîne, ce qui n'est pas très raisonnable pour les grandes applications.
Créez des gestionnaires pour les types bool, slice et integer:
package config import ( "os" "strconv" "strings" ) type GitHubConfig struct { Username string APIKey string } type Config struct { GitHub GitHubConfig DebugMode bool UserRoles []string MaxUsers int }
Ajoutez de nouvelles variables d'environnement à notre fichier env:
GITHUB_USERNAME=craicoverflow GITHUB_API_KEY=TCtQrZizM1xeo1v92lsVfLOHDsF7TfT5lMvwSno MAX_USERS=10 USER_ROLES=admin,super_admin,guest DEBUG_MODE=false
Vous pouvez maintenant les utiliser n'importe où dans l'application:
package main import ( "fmt" "log" "github.com/craicoverflow/go-environment-variables-example/config" "github.com/joho/godotenv" )
C'est fait!
Oui, il existe des packages qui offrent une solution clé en main pour configurer votre application, mais combien sont-ils nécessaires s'il est si facile de le faire vous-même?
Et comment gérez-vous la configuration dans votre application?