Il existe une bibliothèque appelée viper qui simplifie le fichier de paramètres d'environnement avec golang. Cette fois, je vais vous présenter brièvement comment utiliser la vipère
viper Essayez d'utiliser simplement viper Cette fois, nous allons la mapper à une structure et l'implémenter afin qu'elle puisse être acheminée et utilisée.
Arbre source
.
├── config
│ ├── config.yaml
│ └── definition.go
└── main.go
config.yaml
#Fichier Yaml pour définir les variables d'environnement
user:
name: "kosuke"
À l'origine, le nom d'utilisateur de la base de données est souvent entré, mais cette fois, les variables d'environnement ci-dessus sont facilement définies.
definition.go
package config
import (
"fmt"
"github.com/spf13/viper"
)
//Structure pour la cartographie
type Config struct {
User User `yaml:user`
}
type User struct {
Name string `yaml:"name"`
}
func Load() (*Config, error) {
viper.SetConfigName("config") //Spécifiez le nom du fichier de paramètres
viper.SetConfigType("yaml") //Spécifiez le format du fichier de paramètres
viper.AddConfigPath("config/") //Spécifiez le chemin du fichier
err := viper.ReadInConfig() //Rechercher et lire le fichier de configuration
if err != nil {
return nil, fmt.Errorf("Erreur de lecture du fichier de configuration: %s \n", err)
}
var cfg Config
err = viper.Unmarshal(&cfg)
if err != nil {
return nil, fmt.Errorf("unmarshal error: %s \n", err)
}
return &cfg, nil
}
Dans la fonction appelée Load ()
, recherchez le fichier de variable d'environnement et mappez la variable d'environnement à la structure appelée Config
.
main.go
package main
import (
"fmt"
"viper-test/config"
)
func main() {
cfg, err := config.Load()
if err != nil {
panic(err)
}
fmt.Println(cfg.User.Name)
}
Cette fois, j'affiche simplement le contenu de Config
pour m'assurer que la structure contient des données,
Normalement, nous prendrons cette structure comme argument et établirons une connexion DB.
$ go run main.go
kosuke
En outre, lorsque vous travaillez dans un environnement de production, vous souhaiterez peut-être recevoir des variables d'environnement de l'extérieur. Dans ce cas, ...
definition.go
package config
import (
"fmt"
"github.com/spf13/viper"
)
//Structure pour la cartographie
type Config struct {
User User `yaml:user`
}
type User struct {
Name string `yaml:"name"`
}
func Load() (*Config, error) {
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath("config/")
// ===========↓ Addendum=============
//Si la variable d'environnement est déjà spécifiée, donnez-lui la priorité.
viper.AutomaticEnv()
//Paramètres de basculement de la structure de données vers un cas de chameau
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
// ===========↑ Jusqu'ici=============
err := viper.ReadInConfig()
if err != nil {
return nil, fmt.Errorf("Erreur de lecture du fichier de configuration: %s \n", err)
}
var cfg Config
err = viper.Unmarshal(&cfg)
if err != nil {
return nil, fmt.Errorf("unmarshal error: %s \n", err)
}
return &cfg, nil
}
En utilisant la syntaxe ci-dessus, lorsque la variable d'environnement est spécifiée, ce n'est pas la valeur du fichier de configuration, Vous pouvez voir la valeur de la variable d'environnement
python
#Compte tenu des variables d'environnement`go run`
$ USER_NAME=tarou go run main.go
tarou
Cette fois, c'était une utilisation très simple, mais je pense qu'il est très facile de mapper des variables d'environnement sur des structures et de les acheminer car vous n'avez pas à écrire de traitement supplémentaire. Bien entendu, je voudrais être prudent lors de l'utilisation d'informations confidentielles (telles que les clés d'accès AWS).
Recommended Posts