<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] > [github](https://github.com/spf13/viper) > [github 翻譯的中文教程](https://mojotv.cn/2018/12/26/how-to-use-viper-configuration-in-golang) ## 概述 ### 特點 * 設置默認值 * 從JSON,TOML,YAML,HCL,envfile和Java屬性配置文件中讀取 * 實時觀看和重新讀取配置文件(可選) * 從環境變量中讀取 * 從遠程配置系統(etcd或Consul)中讀取,并觀察更改 * 從命令行標志讀取 * 從緩沖區讀取 * 設置顯式值 **優先級** * explicit call to`Set` * flag * env * config * key/value store * default ## 安裝 `go get github.com/spf13/viper` ## 教程 統一使用的配置信息 <details> <summary>config/demo.yaml</summary> ``` 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 ``` </details> <br /> ### 訪問 yaml or json json 處理與 yaml 類似 <details> <summary>main.go</summary> ``` package main import ( "fmt" "github.com/spf13/viper" ) func main() { //讀取yaml文件 v := viper.New() //設置讀取的配置文件 v.SetConfigName("demo") //添加讀取的配置文件路徑 v.AddConfigPath("./config/") //設置配置文件類型,可不設置,自動識別 //v.SetConfigType("yaml") if err := v.ReadInConfig();err != nil { fmt.Printf("err:%s\n",err) } fmt.Print( v.GetInt("Postcode"), //518000 v.GetStringSlice("CompanyInfomation.Department")[0],//Finance ) } ``` </details> <br /> ### 配置信息轉為結構體 <details> <summary>main.go</summary> ``` package main import ( "github.com/spf13/viper" "fmt" ) func main() { //讀取yaml文件 v := viper.New() //設置讀取的配置文件 v.SetConfigName("demo") //添加讀取的配置文件路徑 v.AddConfigPath("./config/") //設置配置文件類型,可不設置,自動識別 //v.SetConfigType("yaml") if err := v.ReadInConfig(); err != nil { panic( err) } //反序列化 yaml := parseYaml(v) fmt.Printf("%+v",yaml) /* result: {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}} */ } 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)(yamlObj YamlSetting ){ if err := v.Unmarshal(&yamlObj); err != nil { fmt.Printf("err:%s", err) } return yamlObj } ``` </details> <br /> ### 使用 flag <details> <summary>main.go</summary> ``` ffunc main() { pflag.String("hostAddress", "127.0.0.1", "Server running address") pflag.Int64("port", 8080, "Server running port") pflag.Parse() //綁定 flag viper.BindPFlags(pflag.CommandLine) fmt.Printf("hostAddress :%s , port:%s", viper.GetString("hostAddress"), viper.GetString("port")) } ``` </details> <br/> 運行 ``` > go run main.go --port 9000 hostAddress :127.0.0.1 , port:9000 ``` ### 監聽配置信息 添加更新信息后,配置自動更改 <details> <summary> main.go</summary> ``` package main import ( "fmt" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" ) func main() { //讀取yaml文件 v := viper.New() //設置讀取的配置文件 v.SetConfigName("demo") //添加讀取的配置文件路徑 v.AddConfigPath("./config/") //設置配置文件類型 v.SetConfigType("yaml") if err := v.ReadInConfig(); err != nil { panic(err) } a1 := v.GetString("Address") fmt.Printf("%+v\n", a1) // Shenzhen // 設置監聽回調函數(非必須) v.OnConfigChange(func(e fsnotify.Event) { a2 := v.GetString("Address")//Shenzhen1 值已更改 fmt.Printf("%+v\n", a2) fmt.Printf("%#v\n", e)//fsnotify.Event{Name:"/Users/idcpj/go/project/go-demo/viper/config/demo.yaml", Op:0x12} }) //開始監聽 v.WatchConfig() } ``` </details> <br /> ### 使用環境變量 <details> <summary>main.gpo</summary> ``` package main import ( "fmt" "os" "github.com/spf13/viper" ) func main() { // 模擬環境變量 start prefix := "PROJECTNAME" envs := map[string]string{ "LOG_LEVEL": "INFO", "MODE": "DEV", "MYSQL_USERNAME": "root", "MYSQL_PASSWORD": "xxxx", } for k, v := range envs { os.Setenv(fmt.Sprintf("%s_%s", prefix, k), v) } // 模擬環境變量 end v := viper.New() v.SetEnvPrefix(prefix) v.AutomaticEnv() for k, _ := range envs { fmt.Printf("env `%s` = %s\n", k, v.GetString(k)) } } ``` </details> <br /> ### 獲取遠程配置 [參考教程](https://learnku.com/articles/33908#fca496) <details> <summary>詳情</summary> ``` package main import ( "fmt" "os" "github.com/spf13/viper" ) func main() { // 模擬環境變量 start prefix := "PROJECTNAME" envs := map[string]string{ "LOG_LEVEL": "INFO", "MODE": "DEV", "MYSQL_USERNAME": "root", "MYSQL_PASSWORD": "xxxx", } for k, v := range envs { os.Setenv(fmt.Sprintf("%s_%s", prefix, k), v) } // 模擬環境變量 end v := viper.New() v.SetEnvPrefix(prefix) v.AutomaticEnv() for k, _ := range envs { fmt.Printf("env `%s` = %s\n", k, v.GetString(k)) } } ``` </details> <br /> ### 寫入配置文件 ``` viper.WriteConfig() // writes current config to predefined path set by 'viper.AddConfigPath()' and 'viper.SetConfigName' viper.SafeWriteConfig() viper.WriteConfigAs("/path/to/my/.config") viper.SafeWriteConfigAs("/path/to/my/.config") // will error since it has already been written viper.SafeWriteConfigAs("/path/to/my/.other_config") ``` ## 查看多個配置地址 ``` v := viper.New() v.SetConfigName("app.conf") v.SetConfigType("ini") v.AddConfigPath("D:/go/antbiz/conf_dev") v.AddConfigPath("./conf/") err := v.ReadInConfig() ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看