golang使用viper解析配置文件的示例代碼
viper讀取配置文件
讀取配置這部分內(nèi)容可以作為初始化內(nèi)容寫(xiě)在init函數(shù)中,后面直接調(diào)用viper相關(guān)接口即可。
yaml類(lèi)型的配置文件在path目錄下,通過(guò)viper接口可以將配置文件加載到viper中,方便后續(xù)使用。
//設(shè)置配置文件
cfgFile="/path/conf/config.yaml"
viper.SetConfigFile(cfgFile)
//加載配置文件內(nèi)容
err = viper.ReadInConfig()
if err != nil {
slog.Error("ReadInConfig error")
}
viper讀取基本數(shù)據(jù)類(lèi)型內(nèi)容
在config.yaml文件中填寫(xiě)如下配置:
#yaml配置文件內(nèi)容 logger: level: DEBUG #log級(jí)別 max_size: 10 #log rotate文件大小配置,單位"MB" compress: true #是否壓縮舊文件
可以在go代碼中定義logger結(jié)構(gòu)體,用于統(tǒng)一管理logger節(jié)點(diǎn)下的配置。
//定義結(jié)構(gòu)體
type LogConfig struct {
MaxSize int `yaml:"max_size"`
Compress bool `yaml:"compress"`
Level string `yaml:"level"`
}
針對(duì)int,bool,string基本數(shù)據(jù)類(lèi)型的配置,viper提供了對(duì)應(yīng)的接口進(jìn)行解析。
//viper接口獲取int,bool,string等類(lèi)型內(nèi)容
conf := &LogConfig{
MaxSize: viper.GetInt("logger.max_size"),
Compress: viper.GetBool("logger.compress"),
Level: viper.GetString("logger.level"),
}
除了上述幾個(gè)數(shù)據(jù)類(lèi)型還包括viper.GetChan接口,基本上可以覆蓋大多數(shù)解析情況。
viper讀取map類(lèi)型配置
如果希望在配置文件中填入map形式的數(shù)據(jù),這是viper沒(méi)有提供對(duì)應(yīng)數(shù)據(jù)類(lèi)型的接口,需要自定義解析方式。
config.yaml配置中內(nèi)容:
#yaml配置文件內(nèi)容
res:
enable_flag: false
res_list: {"001":"aa","002":"bb"}
采用viper.AllSettings()方法獲取全部配置,yaml數(shù)據(jù)以map形式存儲(chǔ),逐步解析可以獲得res_list map類(lèi)型數(shù)據(jù)。
//通過(guò)viper獲取全部配置并解析
resList := make(map[string]string)
as := viper.AllSettings()
res, ok := as["res"].(map[string]interface{})
if !ok {
slog.Error("獲取res配置文件信息失敗")
return nil
}
res_list, ok := res["res_list"].(map[string]interface{})
if !ok {
slog.Error("獲取res_list配置文件信息失敗")
return nil
}
for k, v := range res_list {
resList[k] = v.(string)
}
到此這篇關(guān)于golang使用viper解析配置文件的示例代碼的文章就介紹到這了,更多相關(guān)golang viper解析配置文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang rate令牌桶源碼分析實(shí)現(xiàn)方式
這篇文章主要介紹了golang rate令牌桶源碼分析實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
詳解Go語(yǔ)言中用 os/exec 執(zhí)行命令的五種方法
這篇文章主要介紹了Go語(yǔ)言中用 os/exec 執(zhí)行命令的五種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Go語(yǔ)言中實(shí)現(xiàn)Unix風(fēng)格的進(jìn)程管道方法實(shí)例
這篇文章主要為大家介紹了Go語(yǔ)言中實(shí)現(xiàn)Unix風(fēng)格的進(jìn)程管道方法實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)實(shí)例
golang語(yǔ)言本身就是c的工具集,開(kāi)發(fā)c的程序用到的大部分結(jié)構(gòu)體,內(nèi)存管理,攜程等,golang基本都有,下面這篇文章主要給大家介紹了關(guān)于Golang中字符串(string)與字節(jié)數(shù)組([]byte)一行代碼互轉(zhuǎn)的相關(guān)資料,需要的朋友可以參考下2022-09-09
Go語(yǔ)言類(lèi)型轉(zhuǎn)換及問(wèn)題探討
本文探討了Go語(yǔ)言中的類(lèi)型轉(zhuǎn)換機(jī)制,特別是在使用atomic.Pointer和unsafe時(shí)可能引發(fā)的問(wèn)題,通過(guò)深入分析Go語(yǔ)言的類(lèi)型轉(zhuǎn)換規(guī)則,如數(shù)值類(lèi)型間轉(zhuǎn)換、字符串與byte/rune切片轉(zhuǎn)換、slice與數(shù)組轉(zhuǎn)換,以及底層類(lèi)型相同時(shí)的轉(zhuǎn)換,文章最后給出了一些在Go中使用類(lèi)型轉(zhuǎn)換的建議2024-10-10
golang默認(rèn)Logger日志庫(kù)在項(xiàng)目中使用Zap日志庫(kù)
這篇文章主要為大家介紹了golang默認(rèn)Logger日志庫(kù)在項(xiàng)目中使用Zap日志庫(kù),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04

