Golang配置管理庫(kù)?Viper的教程詳解
一、Viper 是什么?
Viper 是應(yīng)用程序的完整配置的管理工具,用于在應(yīng)用程序中工作,可以處理所有類(lèi)型的配置需求和格式。
二、安裝 Viper
go get github.com/spf13/viper
三、Viper 有什么作用
- 設(shè)置默認(rèn)值
- 讀取 JSON、TOML、YAML(YML)、HCL、envfile 和 Java properties 屬性配置文件
- 實(shí)時(shí)查看和重讀配置文件(可選)
- 從環(huán)境變量中讀取
- 從遠(yuǎn)程配置系統(tǒng)(etcd 或 Consor)讀取數(shù)據(jù),并觀察變化
- 從命令行標(biāo)志讀取
- 從緩沖區(qū)讀取
- 設(shè)置顯式值
四、Viper demo 可供參考
func main() { ReadIni() ReadYml() } func ReadIni() { v := viper.New() v.AddConfigPath("./conf") // 路徑(當(dāng)前路徑下的conf文件夾) v.SetConfigName("configA") // 名稱(chēng) v.SetConfigType("ini") // 類(lèi)型 err := v.ReadInConfig() // 讀配置 if err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { fmt.Println("找不到配置文件..") } else { fmt.Println("配置文件出錯(cuò)..") } } // [section] 如果沒(méi)寫(xiě)就是 default,也就是下面的 key 變成 default.username s1 := v.GetString("db.username") s2 := v.GetInt("web.port") fmt.Printf("ini 文件的數(shù)據(jù)庫(kù)名字:%v, 網(wǎng)絡(luò)端口號(hào):%v \n", s1, s2) } func ReadYml() { v := viper.New() v.AddConfigPath("./conf") v.SetConfigName("configB") v.SetConfigType("yml") err := v.ReadInConfig() if err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { fmt.Println("找不到配置文件..") } else { fmt.Println("配置文件出錯(cuò)..") } } s1 := v.GetString("db.username") s2 := v.GetInt("web.port") s3 := v.GetString("app.time") fmt.Printf("yml 文件的數(shù)據(jù)庫(kù)名字:%v, 網(wǎng)絡(luò)端口號(hào):%v, apptime:%v \n", s1, s2, s3) }
結(jié)果:
ini 文件的數(shù)據(jù)庫(kù)名字:admin, 網(wǎng)絡(luò)端口號(hào):8080
yml 文件的數(shù)據(jù)庫(kù)名字:root, 網(wǎng)絡(luò)端口號(hào):8088, apptime:05/30
配置文件內(nèi)容
- configA.ini
;數(shù)據(jù)庫(kù)配置 [db] username=admin password=123 driver=mysql port=3306 ;網(wǎng)絡(luò)配置 [web] port=8080
- configB.yml
# 數(shù)據(jù)庫(kù)配置 db: username: root password: 123 driver: mysql port: 3306 # 網(wǎng)絡(luò)配置 web: port: 8088 # APP配置 app: {id: 10,time: 05/30}
注意
以上例子在根目錄下面創(chuàng)建了 conf 文件夾,然后創(chuàng)建了 configA.ini 和 configB.yml 文件
五、總結(jié)
使用 viper 能夠很好的去管理你的配置文件信息,比如數(shù)據(jù)庫(kù)的賬號(hào)密碼,服務(wù)器監(jiān)聽(tīng)的端口,你可以通過(guò)更改配置文件去更改這些內(nèi)容,而不用定位到那一段代碼上去,提高了開(kāi)發(fā)效率。 需要注意的是,你還需要補(bǔ)充配置文件的格式相關(guān)的知識(shí),才能更好的去使用它。
到此這篇關(guān)于Golang 配置管理庫(kù) Viper的文章就介紹到這了,更多相關(guān)go 配置管理庫(kù) Viper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Go語(yǔ)言如何解決map并發(fā)安全問(wèn)題
常說(shuō)go語(yǔ)言是一門(mén)并發(fā)友好的語(yǔ)言,對(duì)于并發(fā)操作總會(huì)在編譯期完成安全檢查,所以這篇文章我們就來(lái)聊聊go語(yǔ)言是如何解決map這個(gè)數(shù)據(jù)結(jié)構(gòu)的線(xiàn)程安全問(wèn)題吧2024-04-04goland把go項(xiàng)目打包進(jìn)docker鏡像的全過(guò)程記錄
golang編譯的應(yīng)用是不需要依賴(lài)其他運(yùn)行環(huán)境的,下面這篇文章主要給大家介紹了關(guān)于goland把go項(xiàng)目打包進(jìn)docker鏡像的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Go語(yǔ)言映射內(nèi)部實(shí)現(xiàn)及基礎(chǔ)功能實(shí)戰(zhàn)
這篇文章主要為大家介紹了Go語(yǔ)言映射的內(nèi)部實(shí)現(xiàn)和基礎(chǔ)功能實(shí)戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2022-03-03Golang打包go項(xiàng)目部署到linux服務(wù)器正確方法
這篇文章主要給大家介紹了關(guān)于Golang打包go項(xiàng)目部署到linux服務(wù)器的正確方法,Go?是一個(gè)開(kāi)源的編程語(yǔ)言,它能讓構(gòu)造簡(jiǎn)單、可靠且高效的軟件變得容易,具有簡(jiǎn)潔、快速、安全,并行、有趣、開(kāi)源,內(nèi)存管理、v數(shù)組安全、編譯迅速的特征,需要的朋友可以參考下2023-10-10Go環(huán)境變量配置,及GOROOT、GOPATH的區(qū)別小結(jié)
本文主要介紹了Go環(huán)境變量配置,及GOROOT、GOPATH的區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09goframe重寫(xiě)FastAdmin后端實(shí)現(xiàn)實(shí)例詳解
這篇文章主要為大家介紹了goframe重寫(xiě)FastAdmin后端實(shí)現(xiàn)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12golang之tcp自動(dòng)重連實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇golang之tcp自動(dòng)重連實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06