Go Web 应用程序的目录结构

我已经学习了 Go 网站上的编写 Web 应用程序教程,并且开始编写自己的 Web 应用程序。我还阅读了如何编写 Go 代码的开头,并尝试使用相同的工作区结构组织我的代码。


我正在编写一个名为 mygosite 的简单 Web 应用程序,它通过呈现单个模板来处理所有请求。运行后go install github.com/wesleym/mygosite,我的目录结构现在如下所示:


go

+-src

| +-github.com

|   +-wesleym

|     +-mygosite

|       +-mygosite.go

|       +-templates

|         +- index.html

|       +-.git

+-bin

  +-mygosite

在我的代码中,我指的是带有 path 的模板templates/index.html。当我运行时bin/mygosite,应用程序找不到我的模板,因为它在源代码树中。由于模板对我的应用程序很重要,我不想将它们移到 mygosite git 存储库之外。


考虑到我要做什么,我的目录布局是否合理?我应该将代码中模板的路径更改为src/github.com/wesleym/mygosite/templates/index.html吗?像 CSS 和 JavaScript 这样的静态资产怎么样——在引入它们的时候应该去哪里?


tl;dr:在 Go Web 应用程序项目中,我应该将模板和静态文件放在哪里?


慕少森
浏览 243回答 0
0回答

慕后森

更新 2021,使用Go 1.16,您将使用:新embed包提供在编译期间使用新//go:embed指令访问嵌入在程序中的文件。请参阅“使用“嵌入”包在 Go 中嵌入文件”,来自Amit Saha(@Atlassian 的 SRE),他在他的项目中嵌入了模板。//go:embed templates/main.go.tmplvar tmplMainGo []byte这使得上述模板的内容可用作tmplMainGo变量中的字节片。然后我们可以按如下方式访问模板:tmpl, err := tmpl.Parse(string(tmplMainGo))在 上查看演示amitsaha/go-embed。另请参阅Barak Amar和他自己的演示项目中的“使用 Embed in Go 1.16 版本” 。原回答2014:可以考虑使用项目jteeuwen/go-bindata(2018年存档)这个包将任何文件转换为可管理的 Go 源代码。用于将二进制数据嵌入到 go 程序中。文件数据在转换为原始字节切片之前可以选择 gzip 压缩。你可以在“ golang embed file for later parsing execution use ”中看到它的使用同一页面也提到GeertJohan/go.rice作为替代最近另一个好工具来自esc:Embedding Static Assets in Go一个程序:可以采用一些目录并以与 http.FileSystem 兼容的方式递归地将所有文件嵌入其中可以选择禁用与本地文件系统一起使用以进行本地开发不会在后续运行中更改输出文件文件更改时具有合理大小的差异对销售友好
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go