为了账号安全,请及时绑定邮箱和手机立即绑定

如何将文件嵌入到 Go 二进制文件中

如何将文件嵌入到 Go 二进制文件中

Go
30秒到达战场 2021-06-01 13:04:00
我有一些从 Go 程序中读取的文本文件。我想发布一个可执行文件,而无需额外提供该文本文件。如何将其嵌入到 Windows 和 Linux 上的编译中?
查看完整描述

3 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

使用go-bindata。从自述文件:

该工具将任何文件转换为可管理的 Go 源代码。用于将二进制数据嵌入到 go 程序中。文件数据在转换为原始字节切片之前可以选择 gzip 压缩。


查看完整回答
反对 回复 2021-06-21
?
偶然的你

TA贡献1841条经验 获得超3个赞

正在寻找相同的东西并遇到esc: Embedding Static Assets in Go(截至 2014 年 11 月 19 日),作者Matt Jibson正在评估其他 3 个声称可以进行文件嵌入的流行软件包:

  1. 拉基尔/斯塔蒂克

  2. jteeuwen/go-bindata(以及新的官方go-bindata/go-bindata和另一个改进的kevinburke/go-bindata

  3. GeertJohan/go.rice

并解释为什么他最终想出了自己的包:

  1. 米吉布森/esc

因此,在简单地尝试了所有(按此顺序)之后,我自然而然地选择了 Matt 的esc,因为它是唯一一个开箱即用且具有我所需功能(单个可执行文件中的 HTTPS 服务)的工具,即:

  1. 可以采用一些目录并以与http.FileSystem兼容的方式递归地将所有文件嵌入其中

  2. 可以选择禁用与本地文件系统一起使用以进行本地开发,而无需更改客户端代码

  3. 不会在后续运行中更改输出文件在文件更改时具有合理大小的差异

  4. 能够通过//go:generate而不是强迫您手动编写额外的 Go 代码来完成工作

第 2点对我来说很重要,而其他软件包由于某种原因或其他原因并没有那么好。

来自 esc 的自述文件:

esc 将文件嵌入到 go 程序中,并为它们提供 http.FileSystem 接口。

它在指定路径的命名目录下递归添加所有命名文件或文件。输出文件提供了一个 http.FileSystem 接口,对标准库之外的包具有零依赖性。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信