在运行时获取项目根路径以读取配置文件



我有一个具有以下结构的Go项目,我正在努力读取位于我的项目中的配置文件,我需要读取config yaml(在根项目中(,我应该在sub root directory的其他包中读取它,我得到了找不到的错误

myproject
- config.yaml
- cmd
--com
---ftp
----fs.go

fs.go里面,我需要阅读config.yaml并且没有成功。我尝试os.Getwdex, err := os.Executable(),也"../../../"没有成功,知道吗?

@VonC - 建议使用https://github.com/gobuffalo/packr,这可以帮助我猜,但问题是我需要在fs.go文件中调用它,我需要将其作为参数从main.go文件传递,有没有更好的方法? 因为我需要在很多函数中传递这个参数......

viper能帮忙吗? https://github.com/spf13/viper

我的程序是CLI将用作bin的程序。

> 2018:如果二进制文件是GOPATH/bin内置的,而你的源代码在GOPATH/src中,那么相对路径将是(在运行时(../src/myproject

但是一个更干净的方法是将该文件嵌入到二进制文件中.
例如gobuffalo/packr


更新 2021 年第 1 季度:使用 Go 1.16,您将使用embed

import "embed"的 Go 源文件可以使用//go:embed指令初始化类型为string[]byteFS的变量,其中包含编译时从包目录或子目录中读取的文件内容。

//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))

相关内容

  • 没有找到相关文章

最新更新