在使用 gopkg.in/ini.v1 进行测试和调试期间无法加载我的 iniFile

Cannot Load my iniFile during testing and debugging with gopkg.in/ini.v1

这是我的 Go 项目。

.
├── cmd
│   └── main
│       └── main.go
├── config
│   └── config.go
│
├── config.ini

通常它是可执行的 go 运行 and go build.

但在测试和调试期间无法执行。(go test ./cmd/main and vscode debug) 错误如下

config.ini: no such file or directory 

我尝试将路径更改为 ../../config.ini。 它工作正常,但是无法执行 go 运行 和 build.

如何在所有环境中设置可执行文件的路径?

config/config.go

package config

import (
    "log"
    "os"

    "gopkg.in/ini.v1"
)

type ConfigList struct {
    FgiAPIKey  string
    FgiAPIHost string
    Port       int
    JwtAccess  string
    JwtRefresh string
}

var Config ConfigList

func init() {
    cfg, err := ini.Load("config.ini")
    if err != nil {
        log.Printf("Failed to read file: %v", err)
        os.Exit(1)
    }

    Config = ConfigList{
        FgiAPIKey:  cfg.Section("fgi").Key("api_key").String(),
        FgiAPIHost: cfg.Section("fgi").Key("api_host").String(),
        Port:       cfg.Section("web").Key("port").MustInt(),
        JwtAccess:  cfg.Section("secret").Key("jwt_access").String(),
        JwtRefresh: cfg.Section("secret").Key("jwt_refresh").String(),
    }
}

问题是您使用的不同工具会在不同的地方(或 运行 生成二进制文件)生成二进制文件。代码中 config.ini 的路径指定为相对于进程的当前工作目录。如果你想要非侵入式解决方案,你需要改变你的工作流程(你构建和 运行 主二进制文件,调试器或去测试)或者你可以实现一些回退机制或环境变量来覆盖默认路径配置文件。

在VSCode中,launch.json配置中应该有cwd变量,允许您设置工作目录。你应该能够设置 cwd: "${workspaceFolder}" 并且它应该像你从存储库的根目录中 运行 命令一样工作。

有关变量参考,请参阅 https://code.visualstudio.com/docs/editor/variables-reference