如何解决Go Web应用程序的根目录?

时间:2015-03-08 13:49:23

标签: web go relative-path static-files

我正在使用go的net/http库来提供网络应用。当用户访问该网站时,他们可以直接访问/,并为index.html提供服务(与任何网站一样)。

这是使用以下方式实现的:

r.PathPrefix("/").Handler(http.FileServer(http.Dir("./")))

但是,有两种方法可以构建这样的应用程序。首先,您可以将所有文件打包在同一目录中。在我看来这是一个不稳定的解决方案(如果我直接运行go文件失败)。

src/bin/app.go
src/bin/index.html

或者,更“传统”的风格,其中index.html是顶级。

src/bin/app.go
index.html
  • index.html中的正确位置或go网络应用中的其他静态资源在哪里?
  • 将go文件打包成二进制文件后,./的位置如何确定?
  • go二进制文件是否可以保留非go资源的目录结构,以便在开发环境和生产环境之间保持一致?

UPDATE (下面的答案是正确的,我在下面的Not_a_golfer中实现了建议,我的dir树看起来像这样,通过服务器中的conf或动态逻辑很容易在任何环境中维护)。

├── src
│   └── main
│       └── app.go
└── static
    ├── index.html
    ├── script.js
    └── style.css

1 个答案:

答案 0 :(得分:4)

由于Go不会将资产捆绑到二进制文件中,因此将代码和资产捆绑在一起当然不是一个好主意。

我推荐以下其中一项:

首先,在这两种情况下 - 使您的应用程序可配置,以便它通过命令行标志或配置文件接受静态资产的保存位置。它应该是一个绝对路径,因为它与存储可执行文件的位置无关。

其中一个:

  1. 为静态资产保留一个完全独立的项目,并且作为构建步骤确保它们被打包在一起。实际上,您可以将它们单独部署到您的服务器,因此如果您只是部署HTML / JS /映像更改,则无需重新启动Go应用程序。

  2. 将他们的资源保存在同一个项目中,但创建一个名为“html”或“static”的顶级目录或其他。此目录下不允许使用Go文件。部署过程应与#1中的相同。