【问题标题】:How can I access the templates outside of the package?如何访问包外的模板?
【发布时间】:2014-12-11 05:42:42
【问题描述】:

我已经建立了一个基于this structure 的简单网站。我运行 main.go,一切正常。我希望能够在另一个包中使用这个 webapp,比如“github.com/my/package”。我将“main.go”复制到“github.com/my/package”目录并运行它,然后得到:

"panic: open templates/user/view.html: no such file or directory"

修改this file, for instance,中模板文件的路径以便我可以访问模板的推荐方法是什么?我可以想到两种解决方案:

  1. 在视图中硬编码绝对路径。转到模板文件。
  2. 在 view.go 中有一个全局变量,然后找出模板文件相对于新 main.go 文件的位置并将变量设置为该路径。

如果其他人尝试使用该软件包,第一个显然会中断。第二个选项有点复杂 b/c 你需要找到通往 main 的路径,然后按照自己的方式工作并找出模板的位置......似乎很复杂。

有没有更好的办法?

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以查看go-bindata。它使外部文件(如模板)成为二进制文件的一部分。虽然如果您希望能够在不重新编译的情况下更改模板,这不是一个很好的解决方案

    【讨论】:

    • @Momer:对我来说,模板与“main.go”文件所在的位置相关,这让我觉得很奇怪......看起来模板相对于包来说是 s/b,所以事情不会不要打破。
    【解决方案2】:

    如果有打算用作包/在其他地方重用的功能,那么执行此操作的惯用方法是将该功能移动到包中 - 通常在 pkg 目录中。

    必选的 camlistore 示例位于 https://github.com/camlistore/camlistore/tree/master/pkg

    如何做到这一点的另一个资源是'12 golang best practices' 谈话

    【讨论】:

    • 我看不出移动 pkg 目录中的内容会如何改变任何事情
    猜你喜欢
    • 1970-01-01
    • 2021-11-02
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2016-06-14
    • 2020-01-31
    • 1970-01-01
    相关资源
    最近更新 更多