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

3
我有一组模板文件,如base.htmllogin.htmlprofile.htmlheader.html等,它们以文件夹形式结构化。开发时将它们作为单独的文件是可以接受的,但是当我部署应用程序时,我想将它们全部嵌入字符串中,或者解析和编译为模板,以便像往常一样从代码中使用。
那么我该如何更好地将这些模板制作为Go代码呢?这样我就不必在生产中拥有一个 templates 文件夹,而是将所有内容都放在单个可执行文件中。

2
可能是一个重复问题,关于如何在Go程序中打包静态资源的最佳方法是什么? - icza
3
可能是与https://dev59.com/sGMm5IYBdhLWcg3wMswp相似的重复问题。 - Matej Baćo
1
可能是如何在Go程序中捆绑静态资源的最佳方法?的重复问题。 - hlscalon
4个回答

11

随着Go 1.16的推出,将有官方的"embed"包,以下操作将成为可能(如果您在2021年2月之后阅读此内容,则已经可以实现):

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

这段代码在编译时嵌入mytemplate.html,并将其作为字符串(或者[]byte或文件系统)提供。无需第三方工具或库。


1
最简单的解决方案是在Go源代码中使用字符串字面量嵌入模板。
有一个工具可以帮助,参见go-bindata
我在之前的一些项目中使用了go generate来进行这种类型的操作,参见go generate命令的博客文章介绍

1

0
除了已经提到的go-bindata之外,还有go-bindata-assetfs可以用来从Web服务器提供静态文件。它适用于JavaScript、CSS等文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接