0x00 写在前面
最近用了一下 vipper 这个库用来管理配置,简单记录一下。
0x01 集成
go get github.com/spf13/viper
0x02 常用方法
基本上要使用 vipper 这个库都离不开下面的步骤:
func init() {
// 获取一个 vipper 对象
Viper = viper.New()
// 设置配置文件名
Viper.SetConfigName(".env")
// 设置文件格式
Viper.SetConfigType("env")
// 添加相对路径,相对于 main.go/main.exe
Viper.AddConfigPath(".")
// 读取配置文件
err := Viper.ReadInConfig()
if err != nil {
logger.LogError(err)
}
// 设置特殊前缀,区别系统的环境变量
Viper.SetEnvPrefix("appenv")
// Viper.Get() 时,优先读取环境变量
Viper.AutomaticEnv()
}
当然作为一个配置管理工具来说,只能读取静态配置肯定是不合格的,vipper 同样的提供在代码里动态添加配置项的方法:
// func (v *Viper) Set(key string, value any)
// Set 用以设置配置信息
/*
StrMap map[string]interface{}
*/
func Set(name string, configuration StrMap) {
Viper.Set(name, configuration)
}
当然读取方法必不可少:
// func (v *Viper) Get(key string) any
// Get 获取配置信息
func Get(name string, defaultValue interface{}) interface{} {
// 检查是否存在该 key
if Viper.IsSet(name) {
return Viper.Get(name)
}
if !util.IsEmpty(defaultValue) {
return defaultValue
}
return nil
}
// 注意这里返回的是 interface{} 类型,如果想要获取具体类型的可以自行使用 cast 包来转换
// GetString 获取字符串类型的配置
func GetString(name string, defaultValue interface{}) string {
if value := Get(name, defaultValue); value != nil {
return cast.ToString(value)
}
return ""
}
0x021 示例
Vipper.Set("demo", map[string]interface{} {
"key1":"value1",
})
Vipper.Set("key2", "value2")
Vipper.Get("demo.key1") // value1
Vipper.Get("demo.key2") // value2
Vipper.IsSet("demo.key1") // true
4539

被折叠的 条评论
为什么被折叠?



