Templates 在go二进制文件中包含模板/html文件

Templates 在go二进制文件中包含模板/html文件,templates,go,Templates,Go,喜欢Go的内置模板库,目前我只是将模板声明为conststring。通常如何包含更大、更复杂的模板文件?理想情况下,我更喜欢将它们放在二进制文件中,以简化部署。在Go中没有标准方法可以做到这一点 正如注释所示,有几个库可以帮助您将二进制数据(如模板、图像等)转换为可以使用自己的源文件编译为最终二进制的源文件 虽然这种方法适用于许多项目,但我建议您重新考虑。轻松分发的代价是,在编译主要源代码之前,您必须重新生成源文件,创建资产,并且当您想要分发对模板/javascript/images的微小更改时

喜欢Go的内置模板库,目前我只是将模板声明为conststring。通常如何包含更大、更复杂的模板文件?理想情况下,我更喜欢将它们放在二进制文件中,以简化部署。

在Go中没有标准方法可以做到这一点

正如注释所示,有几个库可以帮助您将二进制数据(如模板、图像等)转换为可以使用自己的源文件编译为最终二进制的源文件

虽然这种方法适用于许多项目,但我建议您重新考虑。轻松分发的代价是,在编译主要源代码之前,您必须重新生成源文件,创建资产,并且当您想要分发对模板/javascript/images的微小更改时&例如,以这种方式包括在内,您必须重新编译并重新启动整个服务器


在我参与的大多数项目中,前端内容的更改是迄今为止最频繁的更改,这导致我们放弃了这种做法。

这里有一个解决方案,可以满足需要并防止mbazon描述的困难:


它可编译为二进制,但当您处于“调试”模式时,它会直接从磁盘读取静态资产。

packr
类似于
go bindata
,但它是主动维护的,甚至可能使用起来更好一些:


你是说像go bindata还是go.rice?也许吧?它们看起来像第三方公用事业公司。这是否意味着没有标准化的方法?(如果是这样的话,我有点惊讶)是的,但我宁愿只有一个文件需要部署/推送到每台服务器上,而且当所有文件都在一个文件中时,更容易回滚到早期版本。必须编辑和推送/同步一组模板文件听起来很不方便。你是怎么做到的,也许是淫秽的。我认为将所有内容捆绑在一个文件中更容易。@Jacob我认为您需要修复部署过程,而不是构建。将最后几次部署保留在服务器上,并具有指向当前部署的符号链接。如果要回滚,只需将符号链接指向后面。很快。否则,rsync很快就会同步很多文件。@mpen我已经按照您描述的方式做了很多年了,我的个人经验是,如果您权衡所有的利弊,您的建议更容易出错,因为这里没有足够的空间来列举所有的原因。我鼓励你考虑扩展并尝试它。我不再推荐这种做法,虽然链接仍然有效,但官方回购协议上个月消失了,这只是一个占位符。回购协议似乎再次存在;这可能是GH的某种问题吗?