前言 #
版本 v1.7.0
更详细文档请移步至官方文档
读取文件 #
viper.SetConfigName("config") // 文件名
viper.SetConfigType("yaml") // 扩展名
viper.AddConfigPath(".") // 添加路径
viper.ReadInConfig() // 读取
写入文件 #
// 写入当前配置路径文件 (by 'viper.AddConfigPath()' and 'viper.SetConfigName()')
viper.WriteConfig() // 覆盖
viper.SafeWriteConfig() // 不覆盖
// 写入指定的配置文件
viper.WriteConfigAs("/path/to/my/.config") // 覆盖
viper.SafeWriteConfigAs("/path/to/my/.config") // 不覆盖
运行时重读 #
无需重启服务
viper.WatchConfig() // 告诉viper,监听配置,更改时重新载入
// 配置变更事件
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
// 做一些有趣的事情,like, viper.Unmarshal to update config
})
从io.Reader读取 #
viper.SetConfigType("toml") // 设置配置类型
var configExample = `debug = true` // 定义配置内容
viper.ReadConfig(bytes.NewBufferString(configExample)) // bytes.Buffer实现了io.Reader接口
fmt.Println(viper.GetBool("debug")) // true
设置配置 #
viper.SetDefault("debug", false) // 设置默认值
viper.SetDefault("jwt", map[string]string{"aglo": "HS256", "secret": ""}) // 更复杂结构
viper.Set("debug", true) // 有时我们需要在程序逻辑中更改或命令行flag来控制
别名 #
多个键引用一个值, 如果配置名称需变更,无需改动业务程序
viper.RegisterAlias("glad", "pleased")
viper.Set("glad", "happy")
viper.GetString("pleased") // happy
with flag #
// 使用标准库 flag
flag.String("config", "app.toml", "config filename")
flag.Parse()
// 设置pflag
pflag.CommandLine.AddGoFlagSet(flag.CommandLine) // 若以上使用pflag,无需此操作
viper.BindPFlags(pflag.CommandLine)
viper.GetString("config")