从执行的 bin 中读取配置

Read config from executed bin

我正在使用 go viper 读取我的存储库中的 config 文件

myrepo
 -config.yaml
 -main.go

我使用下面的代码

viper.SetConfigName("config")
viper.AddConfigPath(".")
viper.SetConfigType("yaml")
err := viper.ReadInConfig()

现在我将它编译为二进制文件,然后 运行 从 不同的路径(运行 垃圾箱),我得到了找不到配置的错误,这里可能出了什么问题?

文件在那里,如果我在调试中使用 ioutil.ReadFile,我会得到它,但不是来自可执行文件...

所以你告诉 viper 它可以从位置 ./config.yaml 读取配置。当你编译项目时,编译器不会用二进制编译config.yaml里面的配置数据。因此,每次二进制文件运行时,它都会查找文件 ./config.yaml.

所以你在这里没有什么选择。要么将配置文件与二进制文件一起移动,并确保在复制二进制文件时也复制配置文件。您拥有的另一个选择是拥有一个标志 "configpath" ,您将配置路径传递给该标志,viper 应该读取该标志并获取配置。另一种选择是将配置放在 .go 文件中,这样就可以编译配置(但我猜这是你不想要的)