【发布时间】:2013-06-08 21:46:06
【问题描述】:
我正在使用io/ioutil 读取一个小文本文件:
fileBytes, err := ioutil.ReadFile("/absolute/path/to/file.txt")
这很好用,但这并不完全是可移植的。就我而言,我要打开的文件在我的 GOPATH 中,例如:
/Users/matt/Dev/go/src/github.com/mholt/mypackage/data/file.txt
由于data 文件夹位于源代码旁边,所以我很想指定相对路径:
data/file.txt
然后我得到这个错误:
恐慌:打开数据/file.txt:没有这样的文件或目录
如何使用它们的相对路径打开文件,尤其是当它们与我的 Go 代码一起存在时?
(请注意,我的问题是关于打开相对于 GOPATH 的文件。 在 Go 中使用任何相对路径打开文件就像给出相对路径而不是绝对路径一样简单;文件是相对于已编译二进制文件的工作目录打开的。在我的情况下,我想打开相对于二进制文件编译位置的文件。事后看来,这是一个糟糕的设计决定。)
【问题讨论】:
-
程序编译后 GOPATH 没有太大意义,分发时更没有意义。
-
您似乎想要的更像是在已编译程序中嵌入文件。
-
有点...除了我希望数据文件与源文件分开。数据文件对程序的功能至关重要。因此,当有人拉下我的源代码(连同它旁边的数据文件)并编译并运行它时,数据文件会使用相对路径加载,因为它们存在于源代码附近或程序执行的位置附近。跨度>
-
编译后的二进制文件应该不依赖于源文件的位置,但是如果有一种方法可以创建一个包含外部资源副本的可执行包依赖。
-
这是一个关于捆绑资源的相关问题,可能就足够了,尽管这不是我的首选方法:stackoverflow.com/questions/13904441/…——或者这个:stackoverflow.com/q/9443418/1048862