登录
首页 >  Golang >  Go问答

如何访问不包含主文件的文件夹中的配置文件?

来源:stackoverflow

时间:2024-03-22 14:12:36 110浏览 收藏

为了将配置文件从主文件所在的文件夹移出,同时仍能访问它,本文提供了以下解决方案: 1. **获取工作目录 (wd)**:使用 `os.Getwd()` 获取项目根目录的路径。 2. **确定顶级父目录 (parentTop)**:如果工作目录是顶级目录,则 `parentTop` 等于 `wd`。否则,使用 `filepath.Dir(wd)` 获取顶级父目录的路径。 3. **构建配置文件路径**:将 `parentTop` 与配置文件的相对路径(例如 "/pkg/config.yaml")连接起来,以获取配置文件的绝对路径。

问题内容

我想向我的项目添加配置,并且我有这样的项目结构:

app:
  -cmd
    - main
       -app.go
  -internal
    - config
        -config.go
  -pkg
  config.yaml
  go.mod
  go.sum

在配置文件中,我想读取config.yaml:

func GetConfig() *Config {
    once.Do(func() {
        instance = &Config{}
        logger := logging.GetLogger("info")
        logger.Info("start config initialisation")
        if err := cleanenv.ReadConfig("config.yaml", instance); err != nil {
            help, _ := cleanenv.GetDescription(instance, nil)
            logger.Info(help)
            logger.Fatal(err)
        }

    })
    return instance
}

我收到错误:系统找不到指定的文件。 要修复它,我需要将配置文件移动到启动应用程序的文件夹,即 cmd/main 我想知道是否可以以某种方式修复它,以便该文件与项目的初始化以及 go.mod 等放在一起。我尝试在阅读的地方指定不同的路径文件,但没有任何效果。

我使用 cleanenv 库进行读取


正确答案


wd,err := os.Getwd()
if err != nil {
    // handle error
}
parentTop := filepath.Dir(wd) // if your working directory is top level you can skip this step
// and wd instead

然后使用父级和parenttop +“/pkg/config.yaml”

到这里,我们也就讲完了《如何访问不包含主文件的文件夹中的配置文件?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>