Golang - 将文件系统嵌入到二进制文件中;与库一起使用

时间:2014-08-03 15:26:19

标签: file-io go

我使用go.rice在Go二进制文件中存储嵌入式文件系统。这非常适合推动生产(即单个二进制分发),并保留所有文件'在内存中访问。

我遇到的问题是第三方库,它们旨在通过传入文件名字符串直接从文件系统加载外部文件(而不是,例如,一个允许我使用的通用Reader接口)抽象文件加载)

是否有某种方法可以创建与Go的标准库os / io工具配合使用的内存中文件系统,从而避免了将资产存储在二进制文件之外的需要?

我可以将字节转储到tmp文件,将其传递给libs,然后删除......但这看起来很麻烦。如果可能的话,宁愿继续在内存中访问。

不必go.rice ...任何其他嵌入机制来保持这种清晰/单一文件分发?

1 个答案:

答案 0 :(得分:0)

抱歉,这是不可能的。 os包是平台操作系统API顶部的瘦包装器。你能做的是:

  1. 使用go.rice在二进制文件中创建嵌入式文件系统。
  2. 在运行时:将嵌入文件复制到临时位置(您可以使用os.TempDir()获取合适的位置来制作临时目录)
  3. 使用临时路径将文件名传递给第三方代码。
  4. 在程序退出时,清理临时目录。
  5. 或者,您可以请求第三方代码的开发人员添加一个额外的API,该API接受io.Reader而不是文件名。