godotenv pour Go : guide complet avec exemples
La bibliothèque godotenv est un outil portable et léger pour charger les variables d'environnement à partir de fichiers au format .env dans l'environnement d'exécution des applications Go. Inspirée de la bibliothèque éponyme pour Ruby et Node.js, elle suit le principe « 12 Factor App » selon lequel la configuration doit être stockée dans des variables d'environnement. godotenv permet aux développeurs de sortir les données sensibles (clés API, mots de passe de bases de données, paramètres de connexion) du code source vers un fichier séparé qui n'est pas inclus dans le système de contrôle de version.
L'objectif principal de la bibliothèque est de simplifier la gestion de la configuration pendant le développement. En production, les variables d'environnement sont généralement définies via des mécanismes système (Docker, Kubernetes, pipelines CI/CD), mais sur la machine locale du développeur, il est pratique d'utiliser un fichier .env. godotenv lit automatiquement ce fichier et rend toutes les variables qu'il contient accessibles via la fonction standard os.Getenv(). Cela évite d'avoir à écrire votre propre analyseur et à gérer les cas particuliers.
La bibliothèque prend en charge les valeurs multilignes, les commentaires (lignes commençant par #), les lignes vides et l'échappement des caractères spéciaux. Elle n'a aucune dépendance externe, en dehors de la bibliothèque standard de Go, ce qui en fait un choix idéal pour les microservices et les utilitaires en ligne de commande. godotenv ne remplace pas les variables d'environnement système existantes, garantissant ainsi un comportement sûr lors du déploiement.
Installation
Pour installer la bibliothèque, exécutez l'une des commandes suivantes dans le terminal à la racine de votre projet Go :
# Installation de la dernière version stable
go get github.com/joho/godotenv
# Si vous utilisez Go Modules (recommandé)
go get github.com/joho/godotenv@latest
Après avoir exécuté la commande, une entrée de dépendance apparaîtra dans le fichier go.mod. Assurez-vous que votre projet est initialisé avec go mod init.
Démarrage rapide
Créez un fichier .env à la racine de votre projet avec le contenu suivant :
# Fichier .env
APP_NAME=MySuperApp
DB_HOST=localhost
DB_PORT=5432
DB_USER=admin
DB_PASSWORD=secret123
SECRET_KEY=my-super-secret-key
Écrivez maintenant un programme Go simple qui chargera ce fichier et affichera les valeurs des variables :
package main
import (
"fmt"
"log"
"os"
"github.com/joho/godotenv"
)
func main() {
// Chargement du fichier .env
err := godotenv.Load()
if err != nil {
log.Fatal("Erreur lors du chargement du fichier .env :", err)
}
// Lecture des variables d'environnement
appName := os.Getenv("APP_NAME")
dbHost := os.Getenv("DB_HOST")
dbPort := os.Getenv("DB_PORT")
dbUser := os.Getenv("DB_USER")
dbPassword := os.Getenv("DB_PASSWORD")
fmt.Printf("Application : %s\n", appName)
fmt.Printf("Base de données : %s:%s\n", dbHost, dbPort)
fmt.Printf("Utilisateur : %s\n", dbUser)
fmt.Printf("Mot de passe : %s\n", dbPassword)
}
Exécutez le programme :
go run main.go
Vous devriez voir la sortie avec les données de votre fichier .env.
Méthodes et fonctions principales
La bibliothèque godotenv fournit plusieurs fonctions clés pour travailler avec les fichiers de configuration. Examinons chacune d'elles en détail.
1. Load(filenames ...string) error
Signature : func Load(filenames ...string) error
Description : Charge les variables des fichiers spécifiés dans l'environnement du processus. Si aucun fichier n'est spécifié, elle cherche par défaut le fichier .env dans le répertoire de travail actuel. Si le fichier n'est pas trouvé, elle retourne une erreur.
package main
import (
"fmt"
"os"
"github.co Aussi dans la bibliothèque
Travailler avec les archives ZIP en Go (Golang) — guide complet
typia pour TypeScript : guide complet avec exemples
Autorisation et authentification en Kotlin : Ktor, JWT et Spring Security
ASP.NET Core pour C# (.NET) : guide complet avec exemples
Travailler avec les dates en Go (Golang) : aperçu des bibliothèques et packages