我有一组模板作为文件,例如base.html
,login.html
,profile.html
,header.html
等等。它们以文件夹结构。
在开发过程中将它们作为单独的文件很好,但是当我部署应用程序时,我希望将它们全部嵌入为字符串,或者像往常一样从代码中解析和编译模板
我应该如何更好地将这些模板作为Go代码?因此,我不必在生产中拥有templates
文件夹,但是单个可执行文件中的所有内容都是?
答案 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 的测试版。