我喜欢Go内置的模板库,目前我只是将模板声明为常量字符串。如何处理包含更大更复杂的模板文件?理想情况下,我希望它们在二进制文件中,以简化部署。
自从Go 1.16发布以来,2021年嵌入静态文件变得更加容易。新版本提供了一个新的包embed
,其中提供了一组方便的接口和方法,可以将静态文件附加到Go二进制文件中。
go version
# 1.16.x
# then
go doc embed
历史上在Go语言中没有标准的方法来完成这个。出于历史原因,本答案被保留。请参见下面的更新答案。
--
正如评论所示,有一些库可用于帮助您将二进制数据(如模板、图像等)转换为可以与您自己的源文件一起编译到最终二进制文件中的Go源文件。
虽然这种方法适用于许多项目,但我建议您重新考虑。轻松分发的代价是,在编译主要源代码之前,您必须重新生成创建资产的源文件;当您想要分发以这种方式包含的模板/ JavaScript/ 图像等的小变化时,您将不得不重新编译和重启整个服务器。
在我参与的大多数项目中,前端内容的更改是最频繁的更改类型,这导致我们放弃了这种做法。