Configuration des applications Go : la bibliothèque viper

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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/viper

Exemple 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.port

Quand 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.

Recommendations