Es gibt eine Bibliothek namens viper, die die Umgebungseinstellungsdatei mit golang vereinfacht. Dieses Mal werde ich kurz vorstellen, wie man die Viper benutzt
viper Versuchen Sie es einfach mit Viper Dieses Mal werden wir es einer Struktur zuordnen und implementieren, damit es geroutet und verwendet werden kann.
Quellbaum
.
├── config
│ ├── config.yaml
│ └── definition.go
└── main.go
config.yaml
#Yaml-Datei zum Festlegen von Umgebungsvariablen
user:
name: "kosuke"
Ursprünglich wird häufig der Benutzername der Datenbank eingegeben, diesmal können die oben genannten Umgebungsvariablen jedoch einfach festgelegt werden.
definition.go
package config
import (
"fmt"
"github.com/spf13/viper"
)
//Struktur für das Mapping
type Config struct {
User User `yaml:user`
}
type User struct {
Name string `yaml:"name"`
}
func Load() (*Config, error) {
viper.SetConfigName("config") //Geben Sie den Namen der Einstellungsdatei an
viper.SetConfigType("yaml") //Geben Sie das Format der Einstellungsdatei an
viper.AddConfigPath("config/") //Geben Sie den Pfad der Datei an
err := viper.ReadInConfig() //Suchen und lesen Sie die Konfigurationsdatei
if err != nil {
return nil, fmt.Errorf("Fehler beim Lesen der Datei einstellen: %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
}
Suchen Sie in der Funktion "Load ()" die Umgebungsvariablendatei und ordnen Sie die Umgebungsvariable der Struktur "Config" zu.
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)
}
Dieses Mal zeige ich nur den Inhalt von "Config" an, um sicherzustellen, dass die Struktur Daten enthält. Normalerweise nehmen wir diese Struktur als Argument und stellen eine DB-Verbindung her.
$ go run main.go
kosuke
Wenn Sie in einer Produktionsumgebung arbeiten, möchten Sie möglicherweise Umgebungsvariablen von außen empfangen. In diesem Fall, ...
definition.go
package config
import (
"fmt"
"github.com/spf13/viper"
)
//Struktur für das Mapping
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/")
// ===========↓ Nachtrag=============
//Wenn die Umgebungsvariable bereits angegeben ist, geben Sie ihr Priorität.
viper.AutomaticEnv()
//Einstellungen zum Umschalten der Datenstruktur auf einen Kamelfall
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
// ===========↑ Bis hierher=============
err := viper.ReadInConfig()
if err != nil {
return nil, fmt.Errorf("Fehler beim Lesen der Datei einstellen: %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
}
Wenn Sie die Umgebungsvariable unter Verwendung der obigen Syntax angeben, ist dies nicht der Wert der Konfigurationsdatei. Sie können den Wert der Umgebungsvariablen sehen
python
#Gegebene Umgebungsvariablen`go run`
$ USER_NAME=tarou go run main.go
tarou
Diesmal war es eine sehr einfache Verwendung, aber ich denke, es ist sehr einfach, Umgebungsvariablen Strukturen zuzuordnen und sie weiterzuleiten, da Sie keine zusätzliche Verarbeitung schreiben müssen. Natürlich möchte ich bei der Verwendung vertraulicher Informationen (z. B. AWS-Zugriffsschlüssel) vorsichtig sein.
Recommended Posts