【问题标题】:Cannot Load my iniFile during testing and debugging with gopkg.in/ini.v1在使用 gopkg.in/ini.v1 进行测试和调试期间无法加载我的 iniFile
【发布时间】:2021-01-03 02:26:35
【问题描述】:

这是我的 Go 项目。

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

通常它是可执行的 go run and go build。

但在测试和调试期间无法执行。(去测试./cmd/main和vscode调试) 下面有错误

config.ini: no such file or directory 

我尝试将路径更改为 ../../config.ini。 它运行良好,但无法执行 go run 和 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(),
    }
}

【问题讨论】:

    标签: go ini


    【解决方案1】:

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

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

    变量参考见https://code.visualstudio.com/docs/editor/variables-reference

    【讨论】:

    • 谢谢您的建议。我解决了。 vscode 仅使用调试。 "cwd": "${workspaceFolder}" 测试和运行正在设置 os.GetEnv。 ` cfg, err := ini.Load(os.Getenv("SRC_ROOT") + "/config.ini")`
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-28
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多