【问题标题】:How to embed Go HTML templates into code?如何将 Go HTML 模板嵌入到代码中?
【发布时间】:2017-01-18 15:59:19
【问题描述】:

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

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

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

【问题讨论】:

标签: html templates go


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    最简单的解决方案是将模板嵌入到 Go 源代码中的字符串字面量中。

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

    我在之前的一些项目中使用go generate进行此类操作,介绍见blog post on go generate command

    【讨论】:

      【解决方案3】:

      除了已经提到的go-bindata,还有go-bindata-assetfs,您可以使用它来提供来自网络服务器的静态文件。它适用于 Javascript、CSS 等。

      【讨论】:

        【解决方案4】:

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

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

        Github issue for go embed with some updates的链接

        【讨论】:

          猜你喜欢
          • 2021-10-13
          • 2020-01-26
          • 2018-02-14
          • 2011-08-08
          • 1970-01-01
          • 2016-01-24
          • 1970-01-01
          • 2021-09-03
          • 2016-05-28
          相关资源
          最近更新 更多