file-io - Golang——以二进制形式嵌入文件系统;与图书馆一起使用

标签 file-io go

我正在使用 go.rice 在 Go 二进制文件中存储嵌入式文件系统。这非常适合推送到生产环境(即单一二进制分发版),并将所有"file"访问保留在内存中。

我遇到的问题是第三方库,它们旨在通过传入文件名字符串直接从文件系统加载外部文件(而不是让我抽象的通用阅读器接口(interface))文件加载)

有没有什么方法可以创建一个与 Go 的标准库 os/io 工具一起工作的内存文件系统,从而绕过将 Assets 存储在二进制文件之外的需要?

我可以将字节转储到 tmp 文件,将其传递给库,然后删除...但这看起来很乱。如果可能,宁愿将访问保留在内存中。

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

最佳答案

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

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

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

关于file-io - Golang——以二进制形式嵌入文件系统;与图书馆一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106182/

相关文章:

java - Java中Scanner的构建和使用

c - 如何在C中输入一行?

Java 文件输出检查

go - 在 labix.org mgo 的 go 模块中使用替换动词

具有 sync.WaitGroup 的 Goroutine 在最后一个 wg.Done() 之前结束

java - Tomcat 部署文件路径(用于 Java I/O 进程)

matlab - 在字符后截断文本扫描

go - channel 中缺少数据

go - gRPC - GoLang - Stackdriver 追踪器

go - 如何替换 Go 模板中的字符串?