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

我使用 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 web 应用程序中其他静态资源的正确位置在哪里?

一旦我们将 go 文件打包成二进制文件,如何确定 ./ 的位置?

go 二进制文件是否可以保留非 go 资源的目录结构,以便在开发环境和生产环境之间保持一致?

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


├── src

│   └── main

│       └── app.go

└── static

    ├── index.html

    ├── script.js

    └── style.css


慕标5832272
浏览 172回答 1
1回答

手掌心

由于 Go 不会将资产捆绑到二进制文件中,因此将代码和资产捆绑在一起当然不是一个好主意。我推荐以下之一:首先,在这两种情况下 - 使您的应用程序可配置,以便它通过命令行标志或配置文件接受静态资产的保存位置。它应该是一个绝对路径,因为它与可执行文件的存储位置无关。或者:为静态资产保留一个完全独立的项目,并在构建步骤中确保将它们打包在一起。事实上,您可以将它们单独部署到您的服务器,因此如果您只部署 HTML/JS/图像更改,则不必重新启动 Go 应用程序。将它们的源代码放在同一个项目中,但创建一个名为“html”或“static”或其他名称的顶级目录。此目录下不允许使用 Go 文件。部署过程应该与#1 中的相同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go