Golang中使用net/http无法加载CSS文件的问题如何解决
Golang中使用net/http无法加载CSS文件的问题如何解决 大家好,
首先,我是一个Go语言和Web开发的新手。 我正在尝试编写一个简单的网站,但无法正确配置CSS。
.
├── static
│ └── css
│ └── test.css
├── test.go
└── tmpl
└── test.html
test.go:
package main
import (
"log"
"net/http"
"text/template"
)
func main() {
website := func(w http.ResponseWriter, r *http.Request) {
templ := template.Must(template.ParseFiles("tmpl/test.html"))
templ.Execute(w, nil)
}
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
http.HandleFunc("/test/", website)
log.Println("Listening on :8081 ...")
err := http.ListenAndServe(":8081", nil)
if err != nil {
log.Fatal(err)
}
}
test.html:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="“X-UA-Compatible”" content="“ie" ="edge”" />
<title>Llynx Demo @ IGMR</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN"
crossorigin="anonymous"
/>
<!-- <style> -->
<!-- [class*="col"] { -->
<!-- padding: 1rem; -->
<!-- background-color: #33b5e5; -->
<!-- border: 2px solid #fff; -->
<!-- color: #fff; -->
<!-- text-align: center; -->
<!-- } -->
<!-- -->
<!-- [class*="con"] { -->
<!-- padding: 1rem; -->
<!-- background-color: #9e33e5; -->
<!-- border: 2px solid #fff; -->
<!-- color: #fff; -->
<!-- text-align: center; -->
<!-- } -->
<!-- </style> -->
<link rel="stylesheet" type="text/css" href="static/css/test.css" />
</head>
<body>
<div class="container">
<h1>HI</h1>
</div>
</body>
</html>
以及 test.css:
.col {
padding: 1rem;
background-color: #33b5e5;
border: 2px solid #fff;
color: #fff;
text-align: center;
}
.con {
padding: 1rem;
background-color: #9e33e5;
border: 2px solid #fff;
color: #fff;
text-align: center;
}
我观察到的三点:
- Chrome开发者工具没有显示无法加载某些CSS文件的错误。
- 如果我访问
http://localhost:8081/static/css/test.css,我可以看到.css文件的内容——这很好,对吧? - 在test.html中:如果我把样式写在那里,我可以看到div变成紫色,所以CSS本身应该不是问题?
我已经搜索了3个小时,希望有人能给我一些提示:)
谢谢!
更多关于Golang中使用net/http无法加载CSS文件的问题如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html
谢谢,但不幸的是,这个方法也不行。
更多关于Golang中使用net/http无法加载CSS文件的问题如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
href="static/css/test.css"
将你 .html 文件中的这行代码改为:
href="/static/css/test.css"
感谢大家, 我不知道我改了什么,但当我使用另一台电脑时(已经两周没碰这个项目了),它突然就能工作了。
我无法正确配置CSS。
这里有一个示例,展示了如何“添加”你放置在public文件夹中的所有内容。
我认为你的HTML或CSS代码可能有问题。我复制了你示例中的所有内容。只是在CSS文件中添加了h1 color: red,更改了这个斜杠,然后一切就正常工作了。
我通读了所有内容,既没有提到文件结构,也没有一个完整的代码仓库。
没有成功 
我通读了所有内容,既没有提到文件结构,也没有一个完整的仓库。
我的文件结构是那种经典的旧式结构。

并且在每个服务文件夹的末尾都提到了文件结构 "./public/css"。
http.Handle("/css/", http.StripPrefix("/css/",
http.FileServer(http.Dir("./public/css"))))
问题出在HTML中CSS文件的路径引用上。你的静态文件服务器配置是正确的,但HTML中的链接使用了相对路径。
在test.html中,CSS链接是:
<link rel="stylesheet" type="text/css" href="static/css/test.css" />
当访问http://localhost:8081/test/时,浏览器会尝试加载http://localhost:8081/test/static/css/test.css,但这个路径不存在。
有两种解决方案:
方案1:使用绝对路径(推荐) 修改test.html中的CSS链接:
<link rel="stylesheet" type="text/css" href="/static/css/test.css" />
注意开头的斜杠/,这表示从根路径开始。
方案2:修改Go代码,使用相对路径 如果你希望保持HTML中的相对路径,可以修改路由处理:
package main
import (
"log"
"net/http"
"text/template"
)
func main() {
website := func(w http.ResponseWriter, r *http.Request) {
templ := template.Must(template.ParseFiles("tmpl/test.html"))
templ.Execute(w, nil)
}
// 静态文件服务器
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
// 处理/test/路径
http.HandleFunc("/test/", website)
// 处理根路径,重定向到/test/
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/test/", http.StatusFound)
})
log.Println("Listening on :8081 ...")
err := http.ListenAndServe(":8081", nil)
if err != nil {
log.Fatal(err)
}
}
同时修改test.html,使用相对路径:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Llynx Demo @ IGMR</title>
<link rel="stylesheet" type="text/css" href="../static/css/test.css" />
</head>
<body>
<div class="container">
<h1>HI</h1>
</div>
</body>
</html>
注意href="../static/css/test.css"中的../,这表示向上返回一级目录。
验证方案1的完整示例:
test.go保持不变,只修改test.html:
<!doctype html>
<html lang="en-US">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Llynx Demo @ IGMR</title>
<link rel="stylesheet" type="text/css" href="/static/css/test.css" />
</head>
<body>
<div class="container">
<h1>HI</h1>
<div class="col">测试COL类</div>
<div class="con">测试CON类</div>
</div>
</body>
</html>
现在访问http://localhost:8081/test/,CSS应该能正常加载。Chrome开发者工具的Network标签页会显示CSS文件成功加载,状态码为200。

