viper unterstützt Yaml, Json, TOML, HCL und andere Formate, was sehr bequem zu lesen ist.
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
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] */ }
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}} */ }
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) */ }
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:
rrreeEnde
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 GolangTutorial-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!