Golang工具庫viper的使用教程
viper 是 go
項(xiàng)目中用來讀取配置文件的庫,支持讀取 yaml
、toml
、json
、hcl
、env
等格式的配置文件
讀取環(huán)境變量
viper
可以讀取終端的環(huán)境變量
如果你用的是 zsh
在 ~/.zshrc
中設(shè)置,如果是 bash
在 ~/.bashrc
中設(shè)置
寫環(huán)境變量時(shí),等號(hào)兩邊不能有空格,否則會(huì)報(bào)錯(cuò)
export APP_DEBUG=true
寫好后,記得 source
一下,或者重啟終端
source ~/.zshrc
使用 viper.AutomaticEnv
將環(huán)境變量都讀取到 viper
中
然后就可以使用 viper.GetBool("APP_DEBUG")
來獲取環(huán)境變量了
func GetEnvInfo(env string) bool { viper.AutomaticEnv() return viper.GetBool(env) } app_debug := GetEnvInfo("APP_DEBUG") fmt.Println(app_debug) // true
讀取本地的配置文件
新建一個(gè) config-debug.yaml
文件,內(nèi)容如下:
host: "127.0.0.1" port: 50051
然后使用 viper
讀取,setConfigFile
填寫的路徑是相對(duì)于 main.go
的路徑
使用 viper.ReadInConfig
來讀取配置文件
viper.SetConfigFile("./config-debug.yaml") if err := viper.ReadInConfig(); err != nil { panic(err) } fmt.Println(viper.GetString("host")) // "127.0.0.1"
使用 viper.SetConfigName
來設(shè)置文件名,viper.SetConfigType
來設(shè)置文件類型,可以更靈活的讀取配置文件
viper.SetConfigName
設(shè)置文件名,不需要帶后綴viper.SetConfigType
設(shè)置文件類型viper.AddConfigPath
設(shè)置文件路徑
viper.SetConfigName("config-debug") viper.SetConfigType("yaml") viper.AddConfigPath("./") if err := viper.ReadInConfig(); err != nil { panic(err) } fmt.Println(viper.GetString("host")) // "127.0.0.1"
將配置文件中的配置映射到結(jié)構(gòu)體中
每次使用 viper.GetString
來獲取配置文件中的配置,都會(huì)寫很多重復(fù)的代碼,可以將配置文件中的配置映射到結(jié)構(gòu)體中
新建結(jié)構(gòu)體,結(jié)構(gòu)體的字段名要和配置文件中的字段名一致,使用 mapstructure
標(biāo)簽來映射
type Server struct { Host string `mapstructure:"host"` Port int `mapstructure:"port"` }
使用 viper.Unmarshal
將配置文件中的配置映射到結(jié)構(gòu)體中
var server Server viper.SetConfigName("config-debug") viper.SetConfigType("yaml") viper.AddConfigPath("./") if err := viper.ReadInConfig(); err != nil { panic(err) } if err := viper.Unmarshal(&server); err != nil { panic(err) } fmt.Println(server.Host) // "127.0.0.1"
監(jiān)聽配置信息的變化
如果配置文件發(fā)生變化,viper
支持在運(yùn)行時(shí)監(jiān)聽配置文件的變化
使用 viper.WatchConfig
來監(jiān)聽配置文件的變化,使用 viper.OnConfigChange
來監(jiān)聽配置文件的變化
onConfigChange
傳入的參數(shù)是一個(gè)函數(shù),函數(shù)的參數(shù)是 fsnotify.Event
,在函數(shù)中重新讀取配置文件,然后將配置文件中的配置映射到結(jié)構(gòu)體中
viper.OnConfigChange(func(e fsnotify.Event) { _ = viper.ReadInConfig() _ = viper.Unmarshal(&server) }) viper.WatchConfig()
到此這篇關(guān)于Golang工具庫viper的使用教程的文章就介紹到這了,更多相關(guān)Golang viper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
自動(dòng)生成代碼controller?tool的簡單使用
這篇文章主要為大家介紹了自動(dòng)生成代碼controller?tool的簡單使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Go調(diào)度器學(xué)習(xí)之協(xié)作與搶占詳解
如果某個(gè)G執(zhí)行時(shí)間過長,其他的G如何才能被正常調(diào)度,這就引出了接下來的話題:協(xié)作與搶占。本文將通過一些示例為大家詳細(xì)講講調(diào)度器中協(xié)作與搶占的相關(guān)知識(shí),需要的可以參考一下2023-04-04使用Go語言開發(fā)一個(gè)高并發(fā)系統(tǒng)
高并發(fā)系統(tǒng)是指能同時(shí)支持眾多用戶請(qǐng)求,處理大量并行計(jì)算的系統(tǒng),這篇文章主要為大家詳細(xì)介紹了如何使用Go語言開發(fā)一個(gè)高并發(fā)系統(tǒng),感興趣的小伙伴可以了解下2023-11-11Go底層channel實(shí)現(xiàn)原理及示例詳解
這篇文章主要介紹了Go底層channel實(shí)現(xiàn)原理及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08