我一直试图弄清楚几次如何在同一页面上提供CSS和html,但我总是最终感到沮丧并使用引导程序。我真的很想让我的下一个项目拥有我自己的手写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))
答案 0 :(得分:0)
如上面注释中提到的,放置文件的目录将相对于编译后的二进制文件。
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
如果您在go run ./cmd/main.go
中运行/your-github-username/project folder
,那么您在问题中的编写方式将使应用程序尝试从/your-github-username/static
加载静态文件。即从您运行go run
命令的位置开始的一个文件夹。
但是,如果您构建和部署应用程序,则相对于您放置编译后的二进制文件的位置,都需要重新创建/static
文件夹。
在main.go
中要做的一件好事是拥有某种初始化功能,该功能可以检查所需的文件夹,创建它们,然后在它们为空时输出指令,等等。作为部署过程的一部分。
如果您想要一个非常好的静态文件托管示例,我建议您查看 go-chi路由器库示例,因为其中有些很棒,其中包括静态文件托管示例: