当前位置: 首页 > 面试题库 >

如何打开与我的GOPATH相关的文件?

羿昊英
2023-03-14
问题内容

我正在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

但是然后我得到这个错误:

恐慌:打开数据/文件。txt:没有此类文件或目录

如何使用文件的相对路径打开文件,尤其是当文件与我的Go代码一起存在时?

请注意,我的问题特别是关于打开相对于GOPATH的 文件
在Go中使用任何相对路径打开文件就像给出相对路径而不是绝对路径一样容易;文件是相对于已编译二进制文件的工作目录打开的。在这种情况下,我想打开相对于二进制文件编译位置的文件。事后看来,这是一个错误的设计决定。)


问题答案:

嗯。。。虽然有点不方便,但是path/filepath包装有满足Abs()我需要的东西(到目前为止):

absPath, _ := filepath.Abs("../mypackage/data/file.txt")

然后,我使用它absPath来加载文件,并且工作正常。

请注意,就我而言,数据文件位于与main我正在运行程序的程序包不同的程序包中。如果所有包装都在同一包装中,我将删除前导../mypackage/。由于该路径显然是相对的,因此不同的程序将具有不同的结构,并且需要对此进行相应的调整。

如果有更好的方法可以将外部资源与Go程序一起使用并保持可移植性,请随时提出其他答案。



 类似资料:
  • 问题内容: 我需要获取机器上所有打开的端口以及打开它们的应用程序的列表。我需要以编程方式获取此信息。 谢谢。 问题答案: 我希望能有一个更聪明的答案。我只是这样做(用Python编程),试图重写一个名为NetHogs的程序。我的版本在这里,特别是这里是Python中用于从中解析表的模块。如果您不是精通Python的人(请学习它),那么请看一下原始的NetHogs,它使用了C / C ++的混合(阅

  • 我在寻求帮助。我已经创建了一个应用程序,其中一个按钮是用来打开特定文件的。 我已将指定的.txt文档放入程序的文件夹中。它与“解决方案”文件处于同一级别。现在,如何编写打开这个特定的。txt文件的代码?

  • 我试图更深入地理解java.util.Collection和java.util.Map,但我对HashSet的功能有些怀疑: 所以,我的问题是:如果一个HashSet总是有一个Hashtable在后台工作,那么每次我们使用HashSet.add()方法向HashSet添加一个新元素时,HashSet都应该将它添加到它的内部Hashtable中。但是,哈希表要求一个值和一个键,那么它使用什么键呢?它

  • 我复制了一个模板从coDepen。这段代码非常过时,有一些旧的cdn链接。这意味着我必须找到这些链接的更新版本。我是如此接近使应用程序完全功能,我需要打开后关闭模式。我相信这和自举有关。链接和模态代码如下。

  • 打开 M600 长按侧边电源按钮直至屏幕上出现 Polar 标志。 关闭 M600 导航至 Settings(设定)应用程式,滚动菜单找到并轻触 System(系统)。 轻触关机。 通过轻触核取标记图标确认关闭电源。

  • 问题内容: 从使用ReactJS的prop验证功能开始,正如文档所说,出于性能原因,该功能仅在“开发模式”下有效。 React似乎正在验证我注释的特定组件的属性,但我不记得显式打开“开发模式”。 我尝试搜索如何触发/切换开发模式,但是没有任何运气。 问题答案: 对方的回答假设您使用外部预建的文件从反应,而正确的,是大多数人不会如何去或 应该 消耗作出反应,一个包。而且,在这一点上,大多数每个Rea