viper는 Yaml, Json, TOML, HCL 및 기타 형식을 지원하므로 읽기가 매우 편리합니다.
go get github.com/spf13/viper
프롬프트에서 golang.org/x/text/ 라이브러리를 찾을 수 없다면 이는 golang.org/x/text 때문입니다. / 이 라이브러리가 GitHub에서 호스팅되는 경로가 일치하지 않습니다.
해결책:
https://github.com/golang/text에서 소스 코드를 다운로드한 다음 $GOPATH/src 아래에 golang.org/x/ 폴더를 만들 수 있습니다(기존 폴더는 무시). ) , golang.org/x/ 폴더에 압축 파일을 추출합니다. + | 각 콜론 뒤에는 공백이 있어야 하며 연속성을 나타내기 위해 배열 앞에 "-" 기호를 추가해야 합니다. 빼기 기호 뒤의 공백) 내용은 다음과 같습니다.
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
yaml 파일 읽기:
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}} */ }Viper는 명령줄 매개변수를 읽는 기능도 제공합니다. :
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) */ }서버가 시작된 후 일부 구성 매개변수를 일시적으로 수정하려면 서버를 다시 시작해야 적용되는 경우가 많습니다. 하지만 viper는 다시 시작하지 않고도 구성 매개변수를 수정할 수 있는 수신 기능을 제공합니다. 매우 실용적입니다.
package main import ( "github.com/spf13/viper" "fmt" "golang.org/x/net/context" "github.com/fsnotify/fsnotify" ) 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) } //创建一个信道等待关闭(模拟服务器环境) ctx, _ := context.WithCancel(context.Background()) //cancel可以关闭信道 //ctx, cancel := context.WithCancel(context.Background()) //设置监听回调函数 v.OnConfigChange(func(e fsnotify.Event) { fmt.Printf("config is change :%s \n", e.String()) //cancel() }) //开始监听 v.WatchConfig() //信道不会主动关闭,可以主动调用cancel关闭 <-ctx.Done() /* result: config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE config is change :"/home/share/go/Viper/config/linux_config.yaml": CREATE */ }End Viper에는 유용한 기능도 많이 있습니다. 이 글에서는 예시와 함께 작은 부분만 설명합니다. 의견을 남겨주셔서 감사합니다. 더 많은 golang 관련 기술 기사를 보려면 golang튜토리얼 칼럼을 방문하세요!
위 내용은 Golang에서 유용한 바이퍼 구성 모듈을 공유하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!