Handle Go-Umgebungsvariablen (Viper)

Einführung

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

Am Ende

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.

Referenzmaterial

Recommended Posts

Handle Go-Umgebungsvariablen (Viper)
Behandeln Sie Umgebungsvariablen in Python
Shell-Variablen, Umgebungsvariablen
Was sind Umgebungsvariablen? (Linux)
HTTP-Umgebungsvariablen in Flask
So definieren Sie Go-Variablen
Umweltbau, Build -Go-
Umgebungsvariablen mit Lambda-Uploader einstellen
Erstellen Sie mit Docker eine Go-Umgebung
Versuchen Sie, AWS Lambda-Umgebungsvariablen anzugeben?
Lesen Sie Systemumgebungsvariablen mit Python-Teil 1
Lesen Sie Systemumgebungsvariablen mit Python-Teil 2