我一直在尝试弄清楚如何在同一页面上提供 css 和 html 几次,但我总是以沮丧和使用 bootstrap 告终。不过,我真的很想让我的下一个项目拥有自己的手写 CSS。我的源代码树看起来像这样。
- cmd
- main.go
- static
- css
- templates
我的源代码树看起来像这样的原因是因为我想在 cmd 中有两个包:一个用于提供模拟数据,另一个用于运行实际应用程序。我看过其他使用 http.FileServer 的帖子,但是项目结构与目录根目录中的 main.go 文件有很大不同。我尝试做类似的路径:
fs := http.FileServer(http.Dir("../static/css"))
http.Handle("/signup/", http.StripPrefix("/static/css", fs))
最佳答案
正如上面评论中提到的,您放置文件的目录将与编译后的二进制文件相关。
go run main.go
将在您的当前目录中编译,然后运行可执行文件,因此您的应用程序中的任何路径都将来自您的应用程序被编译的地方,而不是整体项目结构。我将尝试在下面展示一个示例:
// Current working directory
/your-github-username/project-folder
// Folder with entry point (main.go)
/your-github-username/project-folder/cmd
// Folder with static files (css file)
/your-github-username/project-folder/static
如果您在/your-github-username/project 文件夹
中运行go run ./cmd/main.go
,那么您将其写入您的方式质疑您的应用程序将尝试从 /your-github-username/static
加载静态文件。即从您运行 go run
命令的位置向上一个文件夹。
但是如果您构建和部署应用程序,则需要相对于放置已编译二进制文件的位置重新创建/static
文件夹。
在您的 main.go
中做的一件好事是拥有某种初始化函数,它检查所需的文件夹,创建它们,然后在它们为空时输出指令etc 仍然需要在部署过程中放入一些东西。
如果您想要一个非常好的静态文件托管示例,我建议您查看 go-chi 路由器库示例,因为有一些很棒的示例,包括一个静态文件托管示例:
关于go - 在具有非常规目录结构的同一页面上提供 HTML 模板和 CSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607813/