2021 年更新,其中Go 1.16 https://tip.golang.org/doc/go1.16#library-embed,你会使用:
The new embed package https://tip.golang.org/pkg/embed/使用新的编译过程中提供对嵌入程序中的文件的访问//go:embed
指示。
See "使用“embed”包在 Go 中嵌入文件 https://echorand.me/posts/go-embed/", from 阿米特·萨哈 https://twitter.com/echorand(@Atlassian 的 SRE)确实在他的项目中嵌入了一个模板。
//go:embed templates/main.go.tmpl
var tmplMainGo []byte
这使得上述模板的内容可以作为字节片使用tmplMainGo
多变的。
然后我们可以按如下方式访问该模板:
tmpl, err := tmpl.Parse(string(tmplMainGo))
请参阅演示:amitsaha/go-embed https://github.com/amitsaha/go-embed.
也可以看看 ”在 Go 1.16 版本中使用 Embed https://lakefs.io/working-with-embed-in-go/" from 巴拉克·阿马尔 https://twitter.com/nopcoder和他自己的演示项目 https://github.com/treeverse/blogs/tree/master/mypostcard.
原回答2014:你可以考虑使用该项目jteeuwen/go-bindata https://github.com/jteeuwen/go-bindata(存档于2018年)
该包将任何文件转换为可管理的 Go 源代码。对于将二进制数据嵌入到 go 程序中很有用。文件数据在转换为原始字节切片之前可以选择进行 gzip 压缩。
你可以看到它用在“golang嵌入文件供后续解析执行使用 https://stackoverflow.com/a/12483181/6309"
同一页面还提到GeertJohan/go.rice https://github.com/GeertJohan/go.rice作为备选
最近另一个好工具来自esc:在 Go 中嵌入静态资源 http://mattjibson.com/blog/2014/11/19/esc-embedding-static-assets/
一个程序:
- 可以获取一些目录并以与 http.FileSystem 兼容的方式递归地将所有文件嵌入其中
- 可以选择禁用本地文件系统以进行本地开发
- 不会在后续运行中更改输出文件
- 文件更改时具有合理大小的差异
- 适合供应商