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

标签 go fileserver

我一直在尝试弄清楚如何在同一页面上提供 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-chi static file example

关于go - 在具有非常规目录结构的同一页面上提供 HTML 模板和 CSS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54607813/

相关文章:

pointers - Golang &(*(&v)) 语义

mysql - 加速对服务器(Apache、MySQL 和 Fileserver)的全局访问

java - 如何使用java开发一个基于JXTA2.X并集成Tomcat(或其他servet容器)的p2p服务器?

sql-server - 考虑在哪里存储文档 - 文件服务器上还是数据库中?

http - 在 golang http.FileServer() 中列出错误链接的目录

go - Web 服务器正常关闭未按预期工作

mongodb - filter:= bson.D {{“hello”,“world”}}}而不是使用value(world)如何传递包含该值的变量(world)

python - 无法使用 REST API、谷歌云存储删除 file_name 中包含空格和西里尔字母的多个对象

go - 是否可以定义一个变量,其类型取决于 Golang 中的输入

go - 使用 cron 运行 Go 方法