Golang viper简单使用

Viper

[github author="spf13" project="viper"][/github]
github viper

viper 是一个配置解决方案,拥有丰富的特性:

  • 支持 JSON/TOML/YAML/HCL/envfile/Java properties 等多种格式的配置文件;
  • 可以设置监听配置文件的修改,修改时自动加载新的配置;
  • 从环境变量、命令行选项和io.Reader中读取配置;
  • 从远程配置系统中读取和监听修改,如 etcd/Consul;
  • 代码逻辑中显示设置键值。

监听配置修改

viper.SetConfigFile("./conf/app.yaml")
err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
    panic(fmt.Errorf("Fatal error config file: %w \n", err))
}
viper.WriteConfig() // writes current config to predefined path set by 'viper.AddConfigPath()' and 'viper.SetConfigName'

安全写入配置

viper.WriteConfig() // writes current config to predefined path set by 'viper.AddConfigPath()' and 'viper.SetConfigName'
viper.SafeWriteConfig()
viper.WriteConfigAs("/path/to/my/.config")
viper.SafeWriteConfigAs("/path/to/my/.config") // will error since it has already been written
viper.SafeWriteConfigAs("/path/to/my/.other_config")

找到并读取配置

err := viper.ReadInConfig() // Find and read the config file
if err != nil { // Handle errors reading the config file
    panic(fmt.Errorf("Fatal error config file: %w \n", err))
}

简单使用案例

当前目录结构

├─conf
├─app.yaml
└─internal
├─cmd
├─consts
├─handler
├─model
└─service

方式1 直接设置文件路径

v := viper.New()
v.SetConfigFile("./conf/app.yaml")
err = v.ReadInConfig()
if err != nil {
    log.Fatal("read config failed: %v", err)
}
a := v.Get("trust_trackers")
fmt.Println(a)

方式2 设置文件目录类型

v := viper.New()

v.AddConfigPath("./conf")
v.SetConfigName("app")
v.SetConfigType("yaml")
err = v.ReadInConfig()
if err != nil {
    log.Fatal("read config failed: %v", err)
}
a := v.Get("trust_trackers")
fmt.Println(a)

conf/app.yaml 配置文件

trust_trackers: "asf"
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论共2条

请登录后发表评论

    • 头像海天s0