【发布时间】:2018-04-21 11:18:50
【问题描述】:
是否可以使用 Viper 加载/合并多个配置文件?假设我有一个包含我的程序配置的通用配置文件,以及包含每个客户端配置的客户端特定配置文件,其中一个将被加载,具体取决于程序的输入。
谢谢。
【问题讨论】:
-
来自文档:“Viper 可以搜索多个路径,但目前单个 Viper 实例仅支持单个配置文件。” github.com/spf13/viper#reading-config-files
是否可以使用 Viper 加载/合并多个配置文件?假设我有一个包含我的程序配置的通用配置文件,以及包含每个客户端配置的客户端特定配置文件,其中一个将被加载,具体取决于程序的输入。
谢谢。
【问题讨论】:
viper有ReadInConfig和MergeInConfig,可以多次调用。这是一个(未经测试的)示例:
viper.SetConfigName("default")
viper.AddConfigPath(path)
viper.ReadInConfig()
if context != "" {
viper.SetConfigName(context)
viper.AddConfigPath(path)
viper.MergeInConfig()
}
viper.SetConfigName("config")
viper.AddConfigPath(".")
viper.MergeInConfig()
它按以下顺序读取这些文件:
$path/default.[yaml|toml|json]$path/$context.[yaml|toml|json]./config.[yaml|toml|json]【讨论】:
ConfigPath,如上例所示。
viper.AddConfigPath 添加到全局搜索路径,它不会替换它。