viper读取配置文件
读取配置这部分内容可以作为初始化内容写在init函数中,后面直接调用viper相关接口即可。
yaml类型的配置文件在path目录下,通过viper接口可以将配置文件加载到viper中,方便后续使用。
//设置配置文件
cfgFile="/path/conf/config.yaml"
viper.SetConfigFile(cfgFile)
//加载配置文件内容
err = viper.ReadInConfig()
if err != nil {
slog.Error("ReadInConfig error")
}
viper读取基本数据类型内容
在config.yaml文件中填写如下配置:
#yaml配置文件内容
logger:
level: DEBUG #log级别
max_size: 10 #log rotate文件大小配置,单位"MB"
compress: true #是否压缩旧文件
可以在go代码中定义logger结构体,用于统一管理logger节点下的配置。
//定义结构体
type LogConfig struct {
MaxSize int `yaml:"max_size"`
Compress bool `yaml:"compress"`
Level string `yaml:"level"`
}
针对int,bool,string基本数据类型的配置,viper提供了对应的接口进行解析。
//viper接口获取int,bool,string等类型内容
conf := &LogConfig{
MaxSize: viper.GetInt("logger.max_size"),
Compress: viper.GetBool("logger.compress"),
Level: viper.GetString("logger.level"),
}
除了上述几个数据类型还包括viper.GetChan接口,基本上可以覆盖大多数解析情况。
viper读取map类型配置
如果希望在配置文件中填入map形式的数据,这是viper没有提供对应数据类型的接口,需要自定义解析方式。
config.yaml配置中内容:
#yaml配置文件内容
res:
enable_flag: false
res_list: {"001":"aa","002":"bb"}
采用viper.AllSettings()方法获取全部配置,yaml数据以map形式存储,逐步解析可以获得res_list map类型数据。
//通过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)
}