我正在使用 go.rice 在 Go 二进制文件中存储嵌入式文件系统。这非常适合推送到生产环境(即单一二进制分发版),并将所有"file"访问保留在内存中。
我遇到的问题是第三方库,它们旨在通过传入文件名字符串直接从文件系统加载外部文件(而不是让我抽象的通用阅读器接口(interface))文件加载)
有没有什么方法可以创建一个与 Go 的标准库 os/io 工具一起工作的内存文件系统,从而绕过将 Assets 存储在二进制文件之外的需要?
我可以将字节转储到 tmp 文件,将其传递给库,然后删除...但这看起来很乱。如果可能,宁愿将访问保留在内存中。
不必是 go.rice...任何其他嵌入机制来保持这种清晰/单一文件分发?
最佳答案
对不起,这是不可能的。 os
包是平台操作系统 API 之上的精简包装器。你可以做的是:
- 使用
go.rice
在您的二进制文件中创建一个嵌入式文件系统。 - 在运行时:将嵌入文件复制到一个临时位置(您可以使用
os.TempDir()
获取一个合适的位置来创建您的临时目录) - 使用临时路径将文件名传递给第三方代码。
- 程序退出时,清理临时目录。
或者,您可以要求第三方代码的开发人员包含一个额外的 API,该 API 接受 io.Reader
而不是文件名。
关于file-io - Golang——以二进制形式嵌入文件系统;与图书馆一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106182/