溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Viper解析以及如何進(jìn)行加載配置

發(fā)布時間:2021-10-12 11:50:34 來源:億速云 閱讀:142 作者:柒染 欄目:云計算

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Viper解析以及如何進(jìn)行加載配置,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Viper解析&加載配置

1    Viper是什么

Viper是一個方便Go語言應(yīng)用程序處理配置信息的庫。它可以處理多種格式的配置。它支持的特性:

  • 設(shè)置默認(rèn)值

  • 從JSON、TOML、YAML、HCL和Java properties文件中讀取配置數(shù)據(jù)

  • 可以監(jiān)視配置文件的變動、重新讀取配置文件

  • 從環(huán)境變量中讀取配置數(shù)據(jù)

  • 從遠(yuǎn)端配置系統(tǒng)中讀取數(shù)據(jù),并監(jiān)視它們(比如etcd、Consul)

  • 從命令參數(shù)中讀物配置

  • 從buffer中讀取

  • 調(diào)用函數(shù)設(shè)置配置信息

<a name="ZANBa"></a>

2    安裝viper

go get github.com/spf13/viper

在go的根目錄下 新建 web/config目錄 ,目錄參考: /usr/local/go/web/config<br /><br /> Viper解析以及如何進(jìn)行加載配置 <a name="xdPLW"></a>

3    Viper在Go項目中如何使用

<a name="dVtV0"></a>

在 config目錄中,新建 config.yaml (配置)文件,內(nèi)容如下:

common:  database:    name: test    host: 127.0.0.1

<a name="WUC5o"></a>

3.1    在config目錄中,新建 config.go (獲取配置)文件,內(nèi)容如下
package configimport (    "fmt"    "github.com/spf13/viper")func Init() (interface{},error) {  //模塊中供其他包調(diào)用的方法,首字母必須大寫    //viper設(shè)置 配置    viper.Set("name","abc")    fmt.Printf("name的值是%v\n",viper.GetString("name") )    //讀取配置文件配置    viper.AddConfigPath("config")    viper.SetConfigName("config")    error := viper.ReadInConfig()    /*    代碼解析:        viper.AddConfigPath("conf")用來指定yaml配置文件的路徑        viper.SetConfigName("config")用來指定配置文件的名稱        viper.ReadInConfig()是解析配置文件的函數(shù),如果配置文件的路徑錯誤獲名稱錯誤則解析失敗,會報錯誤        viper.GetString("database.name")是用來從配置文件中根據(jù)層級關(guān)系來獲取數(shù)據(jù)        最后,通過fmt.Println()對數(shù)據(jù)結(jié)果進(jìn)行輸出    */    if(error != nil){        panic(error)    }    c := viper.AllSettings() //獲取所有配置    return c,nil}//獲取數(shù)據(jù)庫配置信息func GetDatabaseInfo() map[string]interface{} {  //模塊中供其他包調(diào)用的方法,首字母必須大寫    return viper.GetStringMap("common.database")}//獲取環(huán)境變量func GetEnvInfo(env string) string {    viper.AutomaticEnv()    return viper.GetString(env)}

<a name="HMur3"></a>

3.2    web目錄中,新建 testviper.go (加載配置)文件,內(nèi)容如下:
package mainimport (    "fmt"    "web/config")func main() {    vipConfig,error := config.Init()                                  //vipConfig是配置    fmt.Printf("config.init error是%v\n", error)    //fmt.Printf("config.init vipConfig是%v\n",vipConfig,)    database := config.GetDatabaseInfo()    fmt.Printf("直接獲取common[database]配置是%v\n", database)    fmt.Printf("直接獲取common[database][host]配置是%v\n", database["host"])    //因為我們不知道 vipConfig 的下級是什么類型的數(shù)據(jù),所以這里使用了interface{}    //因此所有的類型、任意動態(tài)的內(nèi)容都可以解析成 interface{}。    for key,val := range vipConfig.(map[string]interface{}){        //循環(huán)接口類型,獲取配置信息        fmt.Printf("vipConfig 的key是%v val是%v\n",key,val )        switch val.(type) {                                          //判斷val的類型        case map[string]interface{}:                                //如果是 interface接口類型            for ke,va := range val.(map[string]interface{}){        //循環(huán)接口類型,獲取配置信息                fmt.Printf("vipConfig 的ke是%v va是%v\n",ke,va )                switch va.(type) {                                    //判斷va的類型                case map[string]interface{}:                         //如果是 interface接口類型                    for k,v := range va.(map[string]interface{}){   //循環(huán)接口類型,獲取配置信息                        fmt.Printf("vipConfig 的k是%v v是%v\n",k,v )                    }                }            }        }    }    //viper可以獲取服務(wù)器的環(huán)境變量    GO111MODULE := config.GetEnvInfo("GO111MODULE")    fmt.Printf("GO111MODULE的值是%v\n",GO111MODULE)}

<a name="GGfRe"></a>

3.3    使用 go run testviper.go 運行該文件即可
[root@localhost web]# go run testviper.goname的值是abcconfig.init error是
直接獲取common[database]配置是map[host:[127.0.0.1] name:[test]]直接獲取common[database][host]配置是[127.0.0.1]vipConfig 的key是common val是map[database:map[host:127.0.0.1 name:test]]vipConfig 的ke是database va是map[host:127.0.0.1 name:test]vipConfig 的k是name v是testvipConfig 的k是host v是127.0.0.1vipConfig 的key是name val是abcGOROOT的值是on

<a name="RrRfA"></a>

viper支持的加載配置文件類型很多,我們從配置文件讀取或者獲取相關(guān)需要的數(shù)據(jù)信息,根據(jù)文件后綴名查詢分割相關(guān)的配置文件類型指定操作配置的后綴名指定。

上述就是小編為大家分享的Viper解析以及如何進(jìn)行加載配置了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI