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