在 Go 测试期间处理 Viper 配置文件路径

Gal*_*ett 6 go viper-go

所以我有一个非常基本的配置,Viper 从我的基目录读取 .env 文件。如果没有 .env 文件,我会致命终止该进程。正常运行我的应用程序时一切顺利。当我使用 运行测试时go test -v ./..,测试框架似乎会进入每个文件的目录,并每次调用我的 config init() 函数,因此它viper.AddConfigPath(".")指向错误的位置。

这是我的目录结构:

/
  /restapi
    items.go
    items_test.go
  /util
    env.go
  main.go
  .env
Run Code Online (Sandbox Code Playgroud)

环境go

/
  /restapi
    items.go
    items_test.go
  /util
    env.go
  main.go
  .env
Run Code Online (Sandbox Code Playgroud)

每个包基本上都依赖于我的 util 包,因此这个 init 函数会针对每个测试运行。有没有办法让 viper 始终从基本目录中提取 .env 文件,即使有测试正在运行?我尝试了一些不同的 AddConfigPath() 调用。对 Go 有点陌生。或者这个环境变量的结构设置不会工作,因为它每次都失败我的测试?

Gal*_*ett 3

所以显然该viper.SetConfigFile()调用不尊重该viper.AddConfigPath()调用...我将其修改为 usingviper.SetConfigName(".env")并且它实际上会拾取对 AddConfigPath 的调用,因此我可以添加当前目录和父目录的配置路径。