我有一个具有以下结构的Go项目,我正在努力读取位于我的项目中的配置文件,我需要读取config yaml
(在根项目中(,我应该在sub root directory
下的其他包中读取它,我得到了找不到的错误
myproject
- config.yaml
- cmd
--com
---ftp
----fs.go
在fs.go
里面,我需要阅读config.yaml
并且没有成功。我尝试os.Getwd
也ex, 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
、[]byte
或FS
的变量,其中包含编译时从包目录或子目录中读取的文件内容。
//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))