viper 是一个用于读取配置文件和环境变量的 Go 语言库,它提供了简单且灵活的方式来管理和访问配置信息。你可以使用 viper 来解析各种类型的配置文件(如 JSON、YAML、TOML 等),并以一致的方式访问这些配置信息。
以下是一些常见的 viper 用法示例和详解:
-
导入
viper包:在你的 Go 代码中导入
viper包:
import "github.com/spf13/viper"
- 设置配置文件名和路径:
在你的代码中设置配置文件的名称和路径。通常,配置文件可以是 JSON、YAML、TOML 或其他
viper.SetConfigName("config") // 配置文件名(不带扩展名)
viper.SetConfigType("yaml") // 配置文件类型
viper.AddConfigPath(".") // 配置文件路径
- 读取配置文件:
使用 viper.ReadInConfig() 从配置文件中读取配置信息。根据你设置的配置文件名和路径,viper 会自动查找合适的文件并读取配置。
if err := viper.ReadInConfig(); err != nil {
panic("Failed to read configuration")
}
- 获取配置值:
使用 viper.Get() 来获取配置值。配置项的名称要与配置文件中的键一致。
dbUsername := viper.GetString("database.username")
dbPassword := viper.GetString("database.password")
- 设置默认值:
如果配置项在配置文件中没有设置,你可以使用 viper.SetDefault() 设置默认值
viper.SetDefault("server.port", 8080)
- 监听配置变化:
使用 viper.OnConfigChange() 监听配置文件的变化,当配置文件发生改变时,会触发回调函数
viper.OnConfigChange(func(e fsnotify.Event) {
fmt.Println("Config file changed:", e.Name)
})
- 解析配置到结构体:
使用 viper.Unmarshal() 将配置解析到结构体中。
var cfg MyConfigStruct
if err := viper.Unmarshal(&cfg); err != nil {
panic("Failed to unmarshal configuration")
}
其中,MyConfigStruct 是一个结构体类型,与配置文件中的键相匹配的字段将被填充。
- 使用环境变量:
viper 支持使用环境变量来覆盖配置值。在配置文件中使用大写的键名,然后用下划线替代点号("."),例如:DATABASE_USERNAME。