Go Web 应用程序的根是如何解析的?
How does the root of a Go web application get resolved?
我正在使用 go 的 net/http
库来提供网络应用程序。当用户访问该站点时,他们只需转到 /,它就会提供 index.html(与任何站点一样)。
这是使用以下方法实现的:
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./")))
但是,有两种构建此类应用程序的方法。首先,您可以将所有文件打包到同一目录中。这在我看来是一个不稳定的解决方案(如果我 运行 go 文件直接失败)。
src/bin/app.go
src/bin/index.html
或者,更 "traditional" 样式,其中 index.html 是顶级。
src/bin/app.go
index.html
- 正确 index.html 或 go web 应用程序中其他静态资源的位置在哪里?
- 将go文件打包成二进制后./的位置是如何确定的?
- go 二进制文件是否可以保留非 go 资源的目录结构,以便在开发环境和生产环境之间保持一致?
UPDATE(下面的答案是正确的,我实施了下面Not_a_golfer的建议,我的目录树看起来像这样,在任何环境下都易于维护通过 conf 或服务器中的动态逻辑的环境)。
├── src
│ └── main
│ └── app.go
└── static
├── index.html
├── script.js
└── style.css
由于 Go 不会将资产捆绑到二进制文件中,因此将代码和资产捆绑在一起当然不是一个好主意。
我推荐以下其中一项:
首先,在这两种情况下 - 让您的应用程序可配置,以便它接受静态资产的保存位置,无论是通过命令行标志还是配置文件。它应该是绝对路径,因为它与可执行文件的存储位置无关。
并且:
为静态资产保留一个完全独立的项目,并在构建步骤中确保将它们打包在一起。事实上,您可以将它们单独部署到您的服务器,因此如果您只部署 HTML/JS/image 更改,则不必重新启动 Go 应用程序。
将它们的源放在同一个项目中,但创建一个名为 "html" 或 "static" 或其他名称的顶级目录。该目录下不允许有 Go 文件。部署过程应该与#1 中的相同。
我正在使用 go 的 net/http
库来提供网络应用程序。当用户访问该站点时,他们只需转到 /,它就会提供 index.html(与任何站点一样)。
这是使用以下方法实现的:
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./")))
但是,有两种构建此类应用程序的方法。首先,您可以将所有文件打包到同一目录中。这在我看来是一个不稳定的解决方案(如果我 运行 go 文件直接失败)。
src/bin/app.go
src/bin/index.html
或者,更 "traditional" 样式,其中 index.html 是顶级。
src/bin/app.go
index.html
- 正确 index.html 或 go web 应用程序中其他静态资源的位置在哪里?
- 将go文件打包成二进制后./的位置是如何确定的?
- go 二进制文件是否可以保留非 go 资源的目录结构,以便在开发环境和生产环境之间保持一致?
UPDATE(下面的答案是正确的,我实施了下面Not_a_golfer的建议,我的目录树看起来像这样,在任何环境下都易于维护通过 conf 或服务器中的动态逻辑的环境)。
├── src
│ └── main
│ └── app.go
└── static
├── index.html
├── script.js
└── style.css
由于 Go 不会将资产捆绑到二进制文件中,因此将代码和资产捆绑在一起当然不是一个好主意。
我推荐以下其中一项:
首先,在这两种情况下 - 让您的应用程序可配置,以便它接受静态资产的保存位置,无论是通过命令行标志还是配置文件。它应该是绝对路径,因为它与可执行文件的存储位置无关。
并且:
为静态资产保留一个完全独立的项目,并在构建步骤中确保将它们打包在一起。事实上,您可以将它们单独部署到您的服务器,因此如果您只部署 HTML/JS/image 更改,则不必重新启动 Go 应用程序。
将它们的源放在同一个项目中,但创建一个名为 "html" 或 "static" 或其他名称的顶级目录。该目录下不允许有 Go 文件。部署过程应该与#1 中的相同。