在具有非常规目录结构的同一页面上提供 HTML 模板和 CSS?

Serving HTML template and CSS on the same page with unconventional directory structure?

我一直在尝试弄清楚如何在同一页面上提供 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 folder 中 运行 go run ./cmd/main.go,那么按照您在问题中所写的方式,您的应用程序将尝试从 /your-github-username/static 加载静态文件。即从您 运行 go run 命令所在的位置向上一个文件夹。

但是如果您构建和部署应用程序,则需要相对于放置 已编译二进制文件.[=19 的位置重新创建 /static 文件夹=]

在你的 main.go 中做的一件好事是有某种 初始化函数 检查所需的文件夹,创建它们,然后在它们为空时输出指令etc 仍然需要在部署过程中放入一些东西。

如果您想要一个非常好的静态文件托管示例,我建议您查看 go-chi 路由器库示例,因为有一些很棒的示例,包括静态文件托管一:

go-chi static file example