go使用Viper管理配置文件的方法步驟
前言
在項(xiàng)目開(kāi)發(fā)中,需要把一些配置配置提取出來(lái),方便配置和管理,可以使用Viper
工具,Viper 是 Go 應(yīng)用程序的完整配置解決方案,也支持從環(huán)境變量中讀取
viper使用
viper倉(cāng)庫(kù)為
https://github.com/spf13/viper?tab=readme-ov-file
viper依賴安裝
使用以下命令安裝viper依賴
go get github.com/spf13/viper
viper使用
(1)定義一個(gè)yaml配置文件,如
app: name: hello config: 1
放在config文件下
(2)程序讀取配置文件,使用程序
package main import ( "github.com/spf13/viper" "log" ) type App struct { Name string Config int64 } type User struct { App App } func main() { viperConfig := viper.New() // 查找配置文件所在的路徑 viperConfig.AddConfigPath("./config") // 如果配置文件的名稱(chēng)中沒(méi)有擴(kuò)展名,則需要配置此項(xiàng) viperConfig.SetConfigType("yml") // 配置文件名稱(chēng)(無(wú)擴(kuò)展名) viperConfig.SetConfigName("app") if err := viperConfig.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { // 配置文件未找到錯(cuò)誤;如果需要可以忽略 log.Println("配置文件沒(méi)找到") } else { // 配置文件被找到,但產(chǎn)生了另外的錯(cuò)誤 log.Println("讀取文件異常:", err) } } var user User err := viperConfig.Unmarshal(&user) log.Println(user) log.Println("解析異常:", err) }
將配置文件轉(zhuǎn)為對(duì)象,輸出結(jié)果為
(3)也可以不將配置文件轉(zhuǎn)換成類(lèi),直接使用鍵值取值
package main import ( "github.com/spf13/viper" "log" ) type App struct { Name string Config int64 } type User struct { App App } func main() { viperConfig := viper.New() // 查找配置文件所在的路徑 viperConfig.AddConfigPath("./config") // 如果配置文件的名稱(chēng)中沒(méi)有擴(kuò)展名,則需要配置此項(xiàng) viperConfig.SetConfigType("yml") // 配置文件名稱(chēng)(無(wú)擴(kuò)展名) viperConfig.SetConfigName("app") if err := viperConfig.ReadInConfig(); err != nil { if _, ok := err.(viper.ConfigFileNotFoundError); ok { // 配置文件未找到錯(cuò)誤;如果需要可以忽略 log.Println("配置文件沒(méi)找到") } else { // 配置文件被找到,但產(chǎn)生了另外的錯(cuò)誤 log.Println("讀取文件異常:", err) } } log.Println("值為:", viperConfig.Get("app.name")) log.Println("值為:", viperConfig.Get("app.config")) }
輸出結(jié)果為
viper寫(xiě)入文件
在開(kāi)發(fā)過(guò)程中,我們?nèi)绻胿iper寫(xiě)入文件,可以使用
package main import "github.com/spf13/viper" func main() { viper.Set("app.test", "aaa1") //viper.WriteConfig() viper.WriteConfigAs("./config/app.yaml") }
總結(jié)
viper
是一個(gè)強(qiáng)大的工具類(lèi)庫(kù),可以使用其管理項(xiàng)目中的配置文件,不過(guò)go也有其他配置文件,根據(jù)自己上手程序和熟練程度而定
以上就是go使用Viper管理配置文件的方法步驟的詳細(xì)內(nèi)容,更多關(guān)于go Viper管理配置文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go 實(shí)現(xiàn)英尺和米的簡(jiǎn)單單位換算方式
這篇文章主要介紹了Go 實(shí)現(xiàn)英尺和米的簡(jiǎn)單單位換算方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04詳解golang RWMutex讀寫(xiě)互斥鎖源碼分析
這篇文章主要介紹了詳解golang RWMutex讀寫(xiě)互斥鎖源碼分析,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Golang優(yōu)雅保持main函數(shù)不退出的辦法
很多時(shí)候我們需要讓main函數(shù)不退出,讓它在后臺(tái)一直執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于Golang優(yōu)雅保持main函數(shù)不退出的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07golang并發(fā)編程中Goroutine 協(xié)程的實(shí)現(xiàn)
Go語(yǔ)言中的協(xié)程是一種輕量級(jí)線程,通過(guò)在函數(shù)前加go關(guān)鍵字來(lái)并發(fā)執(zhí)行,具有動(dòng)態(tài)棧、快速啟動(dòng)和低內(nèi)存使用等特點(diǎn),本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2024-10-10Go語(yǔ)言中轉(zhuǎn)換JSON數(shù)據(jù)簡(jiǎn)單例子
這篇文章主要介紹了Go語(yǔ)言中轉(zhuǎn)換JSON數(shù)據(jù)簡(jiǎn)單例子,本文先定義了一個(gè)結(jié)構(gòu)體,然后把JSON綁定到結(jié)構(gòu)體上實(shí)現(xiàn)讀取,需要的朋友可以參考下2014-10-10Go語(yǔ)言fmt.Sprintf格式化輸出的語(yǔ)法與實(shí)例
Go 可以使用 fmt.Sprintf 來(lái)格式化字符串,下面這篇文章主要給大家介紹了關(guān)于Go語(yǔ)言fmt.Sprintf格式化輸出的語(yǔ)法與實(shí)例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Go語(yǔ)言做爬蟲(chóng)狀態(tài)碼返回418的問(wèn)題解決
在使用Go語(yǔ)言做爬蟲(chóng)時(shí),使用http.Get(url)去獲取網(wǎng)頁(yè)內(nèi)容,狀態(tài)碼返回404,本文我們就詳細(xì)的介紹一下解決方法,感興趣的可以了解一下2021-12-12Go并發(fā)原語(yǔ)之SingleFlight請(qǐng)求合并方法實(shí)例
本文我們來(lái)學(xué)習(xí)一下 Go 語(yǔ)言的擴(kuò)展并發(fā)原語(yǔ):SingleFlight,SingleFlight 的作用是將并發(fā)請(qǐng)求合并成一個(gè)請(qǐng)求,以減少重復(fù)的進(jìn)程來(lái)優(yōu)化 Go 代碼2023-12-12go語(yǔ)言異常panic和恢復(fù)recover用法實(shí)例
這篇文章主要介紹了go語(yǔ)言異常panic和恢復(fù)recover用法,實(shí)例分析了異常panic和恢復(fù)recover使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03