Viper用法|青训营

169 阅读2分钟

viper 是一个用于读取配置文件和环境变量的 Go 语言库,它提供了简单且灵活的方式来管理和访问配置信息。你可以使用 viper 来解析各种类型的配置文件(如 JSON、YAML、TOML 等),并以一致的方式访问这些配置信息。

以下是一些常见的 viper 用法示例和详解:

  1. 导入 viper

    在你的 Go 代码中导入 viper 包:

import "github.com/spf13/viper"
  1. 设置配置文件名和路径

在你的代码中设置配置文件的名称和路径。通常,配置文件可以是 JSON、YAML、TOML 或其他

viper.SetConfigName("config") // 配置文件名(不带扩展名)
viper.SetConfigType("yaml")   // 配置文件类型
viper.AddConfigPath(".")      // 配置文件路径
  1. 读取配置文件

使用 viper.ReadInConfig() 从配置文件中读取配置信息。根据你设置的配置文件名和路径,viper 会自动查找合适的文件并读取配置。

if err := viper.ReadInConfig(); err != nil {
    panic("Failed to read configuration")
}
  1. 获取配置值

使用 viper.Get() 来获取配置值。配置项的名称要与配置文件中的键一致。

dbUsername := viper.GetString("database.username")
dbPassword := viper.GetString("database.password")
  1. 设置默认值

如果配置项在配置文件中没有设置,你可以使用 viper.SetDefault() 设置默认值

viper.SetDefault("server.port", 8080)
  1. 监听配置变化

使用 viper.OnConfigChange() 监听配置文件的变化,当配置文件发生改变时,会触发回调函数

viper.OnConfigChange(func(e fsnotify.Event) {
    fmt.Println("Config file changed:", e.Name)
})
  1. 解析配置到结构体

使用 viper.Unmarshal() 将配置解析到结构体中。

var cfg MyConfigStruct
if err := viper.Unmarshal(&cfg); err != nil {
    panic("Failed to unmarshal configuration")
}

其中,MyConfigStruct 是一个结构体类型,与配置文件中的键相匹配的字段将被填充。

  1. 使用环境变量

viper 支持使用环境变量来覆盖配置值。在配置文件中使用大写的键名,然后用下划线替代点号("."),例如:DATABASE_USERNAME