为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕标5832272 2021-09-20 15:04:25
我使用 go 的net/http库来提供一个网络应用程序。当用户访问该站点时,他们只需转到 /,它就会提供 index.html(就像任何站点一样)。这是使用以下方法实现的:r.PathPrefix("/").Handler(http.FileServer(http.Dir("./")))但是,有两种方法可以构建这样的应用程序。首先,您可以将所有文件打包在同一目录中。这在我看来是一个不稳定的解决方案(如果我直接运行 go 文件它会失败)。src/bin/app.gosrc/bin/index.html或者,更“传统”的样式,其中 index.html 是顶级的。src/bin/app.goindex.htmlindex.html 或 go web 应用程序中其他静态资源的正确位置在哪里?一旦我们将 go 文件打包成二进制文件,如何确定 ./ 的位置?go 二进制文件是否可以保留非 go 资源的目录结构,以便在开发环境和生产环境之间保持一致?更新(下面的答案是正确的,我实现了下面 Not_a_golfer 的建议,我的目录树看起来像这样,通过服务器中的 conf 或动态逻辑在任何环境中都可以轻松维护)。├── src│   └── main│       └── app.go└── static    ├── index.html    ├── script.js    └── style.css
查看完整描述

1 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

我推荐以下之一:

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

或者:

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

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


查看完整回答
反对 回复 2021-09-20
  • 1 回答
  • 0 关注
  • 171 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信