Go web app的目录结构

时间:2014-11-19 05:42:51

标签: templates web-applications go directory-structure

我已经关注了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应用程序项目中?

3 个答案:

答案 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

demo1

demo2

any