使用viper来管理你的配置
使用viper来管理你的配置
什么是viper
Viper 是适用于 Go 应用程序(包括 12 因素应用程序)的完整配置解决方案。它设计用于在应用程序中工作,可以处理所有类型的配置需求和格式。它支持
- 设置配置默认值
- 读取 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件
- 实时监测和重新读取配置文件
- 从远程配置系统(etcd 或 Consul)读取,并监测修改
- 从命令行标志读取环境变量
如何使用viper
- 首先引入依赖
go get -u github.com/spf13/viper
2.创建一个配置文件取名(这里的名字可以自己定义)confi.yaml
, 这个名字将会被用代码初始化之中。 在代码中,需要构建出配置对应结构体。如下
OPENAI:
OPENAI_API_KEY: ""
bilibili:
BILIBILI_COOKIE: ""
type Config struct {
OPENAIConfig OPENAIConfig `mapstructure:"openai"`
BilibiliConfig BilibiliConfig `mapstructure:"bilibili"`
}
type OPENAIConfig struct {
ApiKey string `mapstructure:"openai_api_key"`
}
type BilibiliConfig struct {
SessionToken string `mapstructure:"BILIBILI_COOKIE"`
}
这边注意的是:tag需要使用mapstructure
而不能使用yaml
,因为viper内部使用的是mapstructure
来解析的数据
3.构建读取逻辑
var GlobalConfig Config
func init() {
// load config from file
viper.SetConfigName(configFile)
// 从配置的目录中读取
viper.AddConfigPath(configFolder)
viper.SetConfigType("yaml")
if err := viper.ReadInConfig(); err != nil {
logger.Panicf("Failed to read config file: %s", err)
}
// unmarshal config
if err := viper.Unmarshal(&GlobalConfig); err != nil {
logger.Panicf("Failed to unmarshal config: %s", err)
}
logger.Infof("Config loaded: %+v", GlobalConfig)
}