我已经关注了Go网站上的Writing Web Applications教程,我开始编写自己的网络应用程序。我还阅读了How to Write Go Code的开头,并尝试使用相同的工作区结构来组织我的代码。
我正在编写一个名为mygosite的简单Web应用程序,它通过呈现单个模板来处理所有请求。运行go install github.com/wesleym/mygosite
后,我的目录结构现在如下所示:
go
+-src
| +-github.com
| +-wesleym
| +-mygosite
| +-mygosite.go
| +-templates
| +- index.html
| +-.git
+-bin
+-mygosite
在我的代码中,我指的是带有路径templates/index.html
的模板。当我运行bin/mygosite
时,应用无法找到我的模板,因为它位于源树中。由于模板对我的应用很重要,我不想将它们移到我的mygosite git存储库之外。
根据我的目的,我的目录布局是否合理?我应该将代码中的模板路径更改为src/github.com/wesleym/mygosite/templates/index.html
吗?那些像CSS和JavaScript这样的静态资产呢 - 在引入它们的时候应该去哪里?
tl; dr:我在哪里将模板和静态文件放在Go Web应用程序项目中?
答案 0 :(得分:3)
您可以考虑使用项目jteeuwen/go-bindata
此包将任何文件转换为可管理的Go源代码。用于将二进制数据嵌入到go程序中。在转换为原始字节切片之前,文件数据可选地进行gzip压缩。
您可以在" golang embed file for later parsing execution use"
中看到它的使用同一页也提到GeertJohan/go.rice
作为替代
另一个最近的好工具来自esc: Embedding Static Assets in Go
一个程序:
- 可以采用一些目录并以与http.FileSystem兼容的方式递归嵌入其中的所有文件
可以选择禁用- 以与本地文件系统一起使用以进行本地开发
- 不会在后续运行中更改输出文件
- 在文件更改时具有合理大小的差异
- 非常友好的
答案 1 :(得分:3)
我在哪里将模板和静态文件放在Go Web应用程序项目中?
是“错误”的问题。如果你问“我的可执行文件将如何找到它的资源?”你几乎处于解决方案中:你的可执行文件应该从一个(或几个)可配置的位置读取它的资源(提供合理的默认值总是很好)。当前工作目录中的命令行标志,环境变量和配置文件对于此类任务是常见的。 (当然,如果你只有一些小资源:按照VonC的推荐将它们打包到你的可执行文件中;一旦你开始包含像图像或视频这样的大型资产,这个方案就会崩溃。)
答案 2 :(得分:1)
如果您想要模板嵌套(有点像模板继承),请尝试:go(golang) template manager, especially for web development 。
建议模板布局可以是:
templates/
├── context
│ ├── layout
│ │ └── layout.tpl.html
│ └── partial
│ └── ads.tpl.html
└── main
└── demo
├── demo1.tpl.html
├── demo2.tpl.html
└── dir1
└── dir2
└── any.tpl.html