vipper 简单使用

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值