【问题标题】:Multiple config files with go-viper使用 go-viper 的多个配置文件
【发布时间】:2018-04-21 11:18:50
【问题描述】:

是否可以使用 Viper 加载/合并多个配置文件?假设我有一个包含我的程序配置的通用配置文件,以及包含每个客户端配置的客户端特定配置文件,其中一个将被加载,具体取决于程序的输入。

谢谢。

【问题讨论】:

标签: go viper-go


【解决方案1】:

viperReadInConfigMergeInConfig,可以多次调用。这是一个(未经测试的)示例:

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]

【讨论】:

  • 如果配置文件名在不同文件夹之间保持不变怎么办?例如,在您的家中为您的应用程序设置一个全局配置,然后在 cwd 中设置一个项目特定的配置。您家中的那个可以使用“全局”前缀来调用,但保持相同的名称更简单。
  • @edupo 只需在每次加载新配置文件时更改ConfigPath,如上例所示。
  • viper.AddConfigPath 添加到全局搜索路径,它不会替换它。
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
  • 2017-07-24
相关资源
最近更新 更多