繁体   English   中英

Go Web应用程序的根是如何解析的?

[英]How does the root of a Go web application get resolved?

我正在使用go的net/http库提供Web应用程序。 当用户访问该网站时,他们只需访问/,即可提供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
  • Go Web应用程序中index.html或其他静态资源的正确位置在哪里?
  • 将go文件打包为二进制文件后,如何确定./的位置?
  • go二进制文件能否保留非go资源的目录结构,以便在开发环境和生产环境之间保持一致?

更新 (下面的答案是正确的,我在下面实现了Not_a_golfer的建议,我的目录树看起来像这样,在任何环境中都可以通过conf或服务器中的动态逻辑轻松维护)。

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

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

我建议以下之一:

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

并且:

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

  2. 将它们的源代码放在同一项目中,但创建一个名为“ html”或“ static”或任何其他名称的顶级目录。 此目录下不允许有Go文件。 部署过程应与#1中的相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM