中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Viper解析以及如何進行加載配置

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

這期內容當中小編將會給大家帶來有關Viper解析以及如何進行加載配置,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

Viper解析&加載配置

1    Viper是什么

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

  • 設置默認值

  • 從JSON、TOML、YAML、HCL和Java properties文件中讀取配置數據

  • 可以監視配置文件的變動、重新讀取配置文件

  • 從環境變量中讀取配置數據

  • 從遠端配置系統中讀取數據,并監視它們(比如etcd、Consul)

  • 從命令參數中讀物配置

  • 從buffer中讀取

  • 調用函數設置配置信息

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

2    安裝viper

go get github.com/spf13/viper

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

3    Viper在Go項目中如何使用

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

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

common:  database:    name: test    host: 127.0.0.1

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

3.1    在config目錄中,新建 config.go (獲取配置)文件,內容如下
package configimport (    "fmt"    "github.com/spf13/viper")func Init() (interface{},error) {  //模塊中供其他包調用的方法,首字母必須大寫    //viper設置 配置    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()是解析配置文件的函數,如果配置文件的路徑錯誤獲名稱錯誤則解析失敗,會報錯誤        viper.GetString("database.name")是用來從配置文件中根據層級關系來獲取數據        最后,通過fmt.Println()對數據結果進行輸出    */    if(error != nil){        panic(error)    }    c := viper.AllSettings() //獲取所有配置    return c,nil}//獲取數據庫配置信息func GetDatabaseInfo() map[string]interface{} {  //模塊中供其他包調用的方法,首字母必須大寫    return viper.GetStringMap("common.database")}//獲取環境變量func GetEnvInfo(env string) string {    viper.AutomaticEnv()    return viper.GetString(env)}

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

3.2    web目錄中,新建 testviper.go (加載配置)文件,內容如下:
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 的下級是什么類型的數據,所以這里使用了interface{}    //因此所有的類型、任意動態的內容都可以解析成 interface{}。    for key,val := range vipConfig.(map[string]interface{}){        //循環接口類型,獲取配置信息        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{}){        //循環接口類型,獲取配置信息                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{}){   //循環接口類型,獲取配置信息                        fmt.Printf("vipConfig 的k是%v v是%v\n",k,v )                    }                }            }        }    }    //viper可以獲取服務器的環境變量    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支持的加載配置文件類型很多,我們從配置文件讀取或者獲取相關需要的數據信息,根據文件后綴名查詢分割相關的配置文件類型指定操作配置的后綴名指定。

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

原阳县| 长兴县| 鱼台县| 山阳县| 文昌市| 新化县| 方正县| 磐石市| 南投县| 邓州市| 澎湖县| 昆山市| 东平县| 阳山县| 皮山县| 宁武县| 大厂| 襄汾县| 仙居县| 乡城县| 蓝田县| 贵南县| 乌鲁木齐县| 南丰县| 敦化市| 大庆市| 兴和县| 平山县| 临泽县| 冷水江市| 盘锦市| 金平| 西和县| 黄石市| 乐亭县| 武宣县| 秦皇岛市| 大理市| 东辽县| 南澳县| 且末县|