Qu'est-ce que viper et pourquoi en a-t-on besoin ?
Viper est une bibliothèque puissante pour la gestion de configuration dans les applications Go (Golang). Elle résout l'un des problèmes clés du développement : la gestion centralisée et flexible des paramètres d'application, indépendamment de la source de données. Viper prend en charge JSON, TOML, YAML, HCL, INI, envfile et les variables d'environnement, ce qui en fait un choix idéal pour les microservices, les utilitaires CLI et les applications web.
Fonctionnalités principales
- Sources multiples : lecture à partir de fichiers (JSON, YAML, TOML), variables d'environnement, stockages distants (etcd, Consul) et même des flags de ligne de commande.
- Priorités : résolution automatique des conflits — la dernière source définie a la priorité la plus élevée.
- Rechargement en direct : possibilité de surveiller les modifications des fichiers de configuration sans redémarrer l'application (nécessite une configuration supplémentaire).
- Prise en charge des clés imbriquées : accès aux paramètres via la notation par points (par exemple,
app.db.host).
Installation
Installez viper via le gestionnaire de paquets standard de Go :
go get github.com/spf13/viperExemple de code en Go
Créez un fichier config.yaml :
app: name: "MyApp" port: 8080database: host: "localhost" user: "admin" password: "secret"Exemple d'utilisation de viper pour lire la configuration :
package main
import (\t"fmt"\t"github.com/spf13/viper")
func main() {\tviper.SetConfigName("config")\tviper.SetConfigType("yaml")\tviper.AddConfigPath(".")
\terr := viper.ReadInConfig()\tif err != nil {\t\tpanic(fmt.Errorf("erreur de lecture de la configuration : %w", err))\t}
\tappName := viper.GetString("app.name")\tport := viper.GetInt("app.port")\tdbHost := viper.GetString("database.host")
\tfmt.Printf("App : %s, Port : %d, DB : %s", appName, port, dbHost)}Vous pouvez également utiliser des variables d'environnement avec un préfixe :
viper.SetEnvPrefix("MYAPP")viper.AutomaticEnv()// Désormais, la variable MYAPP_APP_PORT sera accessible en tant que app.portQuand utiliser viper ?
- Lorsque la prise en charge de plusieurs formats de configuration (YAML, JSON, TOML) est requise.
- Pour les applications où les paramètres peuvent être remplacés par des variables d'environnement (par exemple, dans Docker/Kubernetes).
- Dans une architecture de microservices, où la configuration peut être chargée à partir de services externes (etcd, Consul).
- Si vous devez séparer la configuration pour les environnements dev/staging/production.
Viper est la norme de facto pour la gestion de configuration dans la communauté Go, utilisé dans des projets tels que Hugo, Docker CLI et bien d'autres.