Golang -嵌入二进制文件系统;使用库



我用go。将嵌入式文件系统存储在Go二进制文件中。这对于推送到生产环境(即单个二进制发行版)非常有效,并将所有'file'访问保留在内存中。

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

是否有办法创建一个内存中的文件系统,与Go的标准库os/io工具一起工作,从而绕过需要在二进制文件之外存储资产?

我可以将字节转储到tmp文件,传递给lib,然后删除…但这似乎很混乱。如果可能的话,希望在内存中保留访问权限。

不必是go.rice…有没有其他的嵌入机制来保持这种清晰/单一的文件分布?

对不起,这是不可能的。os包是平台操作系统API之上的一个薄包装器。你可以这样做:

  1. 使用go.rice在二进制文件中创建一个嵌入式文件系统。
  2. 在运行时:复制嵌入的文件到一个临时位置(你可以使用os.TempDir()得到一个合适的地方,使您的临时目录)
  3. 使用临时路径将文件名传递给第三方代码
  4. 程序退出时,清理临时目录。

或者,您可以要求第三方代码的开发人员包含一个额外的API,该API接受io.Reader而不是文件名。

最新更新