如何将Go HTML模板嵌入到代码中?

时间:2017-01-18 15:59:20

标签: html templates go

我有一组模板作为文件,例如base.htmllogin.htmlprofile.htmlheader.html等等。它们以文件夹结构。

在开发过程中将它们作为单独的文件很好,但是当我部署应用程序时,我希望将它们全部嵌入为字符串,或者像往常一样从代码中解析和编译模板

我应该如何更好地将这些模板作为Go代码?因此,我不必在生产中拥有templates文件夹,但是单个可执行文件中的所有内容都是?

4 个答案:

答案 0 :(得分:3)

Go 1.16 将提供官方的 "embed" 软件包,并且以下内容是可能的(如果您在 2021 年 2 月之后阅读此内容,):

//go:embed "mytemplate.tmpl"
var myTemplate string

此代码在编译时嵌入 mytemplate.html 并且它可以作为字符串使用(或作为 []byte 或作为文件系统,如果您愿意)。无需第 3 方工具或库。

答案 1 :(得分:1)

最简单的解决方案是在Go源代码中的字符串文字中嵌入模板。

有一个可以提供帮助的工具,请参阅go-bindata

我在以前的一些项目中使用了go generate进行此类操作,请参阅blog post on go generate command了解。

答案 2 :(得分:0)

除了已经提及的go-bindata之外,还有go-bindata-assetfs可用于从网络服务器提供静态文件。它对Javascript,CSS等有好处。

答案 3 :(得分:0)

在计划于 2 月发布的 Go 1.16 中,有 //go:embed 注释指令。
这允许您直接在二进制文件中嵌入文件。
目前可以下载 1.16 的测试版。

the go:embed comment directive 设计草案链接

Github issue for go embed with some updates 的链接