Teilen Sie ein nützliches Viper-Konfigurationsmodul in Golang

藏色散人
Freigeben: 2021-07-09 14:59:01
nach vorne
2672 Leute haben es durchsucht

Vorwort

viper unterstützt Yaml, Json, TOML, HCL und andere Formate, was sehr bequem zu lesen ist.

Installieren

Holen Sie sich github.com/spf13/viper

Wenn die Eingabeaufforderung die Bibliothek golang.org/x/text/ nicht finden kann, liegt das an golang.org/x/text / Der Pfad, in dem diese Bibliothek auf GitHub gehostet wird, ist inkonsistent.

Lösung:

Sie können den Quellcode von https://github.com/golang/text herunterladen und dann den Ordner golang.org/x/ unter $GOPATH/src erstellen (den vorhandenen ignorieren). ) , extrahieren Sie die komprimierte Datei in den Ordner golang.org/x/.

                                                                                                                                                                                                    Eigentlich ist die Hauptsache, dass nach jedem Doppelpunkt ein Leerzeichen stehen muss und dass vor dem Array ein „-“-Zeichen eingefügt werden muss, um die Kontinuität anzuzeigen (beachten Sie, dass es auch ein Leerzeichen gibt). ein Leerzeichen nach dem Minuszeichen), der Inhalt lautet wie folgt:

TimeStamp: "2018-10-18 10:09:23"
Address: "Shenzhen"
Postcode: 518000
CompanyInfomation:
  Name: "Sunny"
  MarketCapitalization: 50000000
  EmployeeNum: 200
  Department:
    - "Finance"
    - "Design"
    - "Program"
    - "Sales"
  IsOpen: false
Nach dem Login kopieren

    Lesen Sie die Yaml-Datei:
package main

import (
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	//读取yaml文件
	v := viper.New()
	//设置读取的配置文件
	v.SetConfigName("linux_config")
	//添加读取的配置文件路径
	v.AddConfigPath("./config/")
	//windows环境下为%GOPATH,linux环境下为$GOPATH
	v.AddConfigPath("$GOPATH/src/")
	//设置配置文件类型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig();err != nil {
		fmt.Printf("err:%s\n",err)
	}

	fmt.Printf(
		`
		TimeStamp:%s
		CompanyInfomation.Name:%s
		CompanyInfomation.Department:%s `,
		v.Get("TimeStamp"),
		v.Get("CompanyInfomation.Name"),
		v.Get("CompanyInfomation.Department"),
	)

	/*
	result:
	TimeStamp:2018-10-18 10:09:23
	CompanyInfomation.Name:Sunny
	CompanyInfomation.Department:[Finance Design Program Sales]
	*/

	
}
Nach dem Login kopieren
  Sie können die Serialisierung auch direkt in Struct umkehren, was sehr praktisch ist:
package main

import (
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	//读取yaml文件
	v := viper.New()
	//设置读取的配置文件
	v.SetConfigName("linux_config")
	//添加读取的配置文件路径
	v.AddConfigPath("./config/")
	//windows环境下为%GOPATH,linux环境下为$GOPATH
	v.AddConfigPath("$GOPATH/src/")
	//设置配置文件类型
	v.SetConfigType("yaml")

	if err := v.ReadInConfig();err != nil {
		fmt.Printf("err:%s\n",err)
	}

	fmt.Printf(
		`
		TimeStamp:%s
		CompanyInfomation.Name:%s
		CompanyInfomation.Department:%s `,
		v.Get("TimeStamp"),
		v.Get("CompanyInfomation.Name"),
		v.Get("CompanyInfomation.Department"),
	)

	/*
	result:
	TimeStamp:2018-10-18 10:09:23
	CompanyInfomation.Name:Sunny
	CompanyInfomation.Department:[Finance Design Program Sales]
	*/

	//反序列化
	parseYaml(v)

}

type CompanyInfomation struct{
	Name string
	MarketCapitalization int64
	EmployeeNum int64
	Department []interface{}
	IsOpen bool
}

type YamlSetting struct{
	TimeStamp string
	Address string
	Postcode int64
	CompanyInfomation CompanyInfomation
}


func parseYaml(v *viper.Viper){
	var yamlObj YamlSetting;
	if err := v.Unmarshal(&yamlObj) ; err != nil{
		fmt.Printf("err:%s",err)
	}
	fmt.Println(yamlObj)
	/*
	result:
	{2018-10-18 10:09:23 Shenzhen 518000 {Sunny 50000000 200 [Finance Design Program Sales] false}}
	*/
}
Nach dem Login kopieren
Viper bietet auch die Funktion zum Lesen von Befehlszeilenparametern :

package main

import (
	"github.com/spf13/pflag"
	"github.com/spf13/viper"
	"fmt"
)

func main() {
	pflag.String("hostAddress", "127.0.0.1", "Server running address")
	pflag.Int64("port", 8080, "Server running port")
	pflag.Parse()

	viper.BindPFlags(pflag.CommandLine)
	fmt.Printf("hostAddress :%s , port:%s", viper.GetString("hostAddress"), viper.GetString("port"))
	/*
	example:
	go run main2.go --hostAddress=192.192.1.10 --port=9000
	help:
	Usage of /tmp/go-build183981952/b001/exe/main:
     --hostAddress string   Server running address (default "127.0.0.1")
     --port int             Server running port (default 8080)

	*/

}
Nach dem Login kopieren

Wenn wir nach dem Start unseres Servers einige Konfigurationsparameter vorübergehend ändern möchten, müssen wir den Server neu starten, damit er wirksam wird. Viper bietet jedoch eine Abhörfunktion, mit der Konfigurationsparameter ohne Neustart geändert werden können ist sehr praktisch:

rrree

Ende

Dieser Artikel veranschaulicht nur einen kleinen Teil mit Beispielen. Vielen Dank für Ihre Kommentare.

Weitere technische Artikel zum Thema Golang finden Sie in der

Golang

Tutorial-Kolumne!

Das obige ist der detaillierte Inhalt vonTeilen Sie ein nützliches Viper-Konfigurationsmodul in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage