我有一个下一个结构的项目:
|_main.go
|_config
|_config.go
|_config_test.go
|_config.json
我在config.go
中有下一个代码行:
file, _ := os.Open("config/config.json")
当我执行包含来自main.go
的代码行的方法时,一切正常。但是,当我尝试从config_test.go
执行此方法时,会产生错误:
open config/config.json: no such file or directory
据我所知,这是一个工作目录问题,因为我使用来自不同目录的相对路径启动相同的代码。如何在不使用config.go
完整路径的情况下解决此问题?
答案 0 :(得分:4)
始终根据当前目录解析相对路径。因此,避免相对路径会更好。
使用命令行flags或配置管理工具(更好的方法),例如Viper
同样根据The Twelve-Factor App,您的配置文件应该在项目之外。
例如使用Viper:
import "github.com/spf13/viper"
func init() {
viper.SetConfigName("config")
// Config files are stored here; multiple locations can be added
viper.AddConfigPath("$HOME/configs")
errViper := viper.ReadInConfig()
if errViper != nil {
panic(errViper)
}
// Get values from config.json
val := viper.GetString("some_key")
// Use the value
}