我一直在使用我在viper package中了解到的another question在Go中探索配置管理。我无法理解如何初始化新配置。我想要做的是找到系统配置(如果存在),然后是用户配置,然后,如果所有其他方法都失败,则从默认值创建(然后使用)新用户配置。下次运行应用程序时,我希望找到我之前创建的配置。我这样使用它:
import (
"fmt"
"github.com/spf13/viper"
"os"
"os/user"
"path/filepath"
)
usr, err := user.Current()
appMode := "test" // or "production" or...
configDir := filepath.Join(usr.HomeDir, ".myapp")
config := viper.New()
config.SetConfigName(appMode)
config.SetConfigType("json")
config.SetDefault("group1.key1", "value1.1")
config.SetDefault("group1.key2", 1234)
config.SetDefault("group2.key1", "value2.1")
config.SetDefault("group2.key2", 5678)
config.AddConfigPath("/usr/share/myapp/config")
config.AddConfigPath("/usr/local/share/myapp/config")
config.AddConfigPath(configDir)
if err := config.ReadInConfig(); err != nil {
filename := filepath(configDir, fmt.Sprintf("%s.json", appMode))
_, err := os.Create(filename)
if err != nil {
panic(fmt.Stringf("Failed to create %s", filename))
}
}
if err := config.ReadInConfig(); err != nil {
panic("Created %s, but Viper failed to read it: %s",
filename, err)
}
此时,我希望为我创建〜/ .myapp / test.json,其中包含以下内容:
{
"group1": {
"key1": "value1.1",
"key2": 1234
},
"group2": {
"key1": "value2.1",
"key2": 5678
}
}
结果是该文件为空,并且第二次尝试读取该文件也失败,并显示消息" open:no such file or directory"即使它存在。如果我手动编辑文件,Viper会找到并解析它。显然,我可以以编程方式创建JSON文件,但这似乎是一个明显的用例,我必须在这里遗漏一些东西。