我正在尝试仅使用标准库在Go中设置HTTP服务器。服务器应该能够接受格式为/:uuid
的请求,并且应该能够为index.html
文件以及导入其中的css文件提供服务。这是我的代码:
func indexHandler(w http.ResponseWriter, r *http.Request) {
// serve index.html
if r.URL.Path == "/" {
http.ServeFile(w, r, "./web/index.html")
} else {
// if the path is /randomwords, redirect to mapped URL
randomwords := r.URL.Path[1:]
url := getMappedURL(randomwords)
http.Redirect(w, r, url, http.StatusFound)
}
}
func main() {
http.HandleFunc("/", indexHandler)
log.Println("listening on port 5000")
http.ListenAndServe(":5000", nil)
}
这提供了html文件,并且能够接受诸如/:something
之类的请求,但是问题在于它不包含CSS文件。谷歌搜索后,我将主要功能更改为:
func main() {
fs := http.FileServer(http.Dir("web"))
http.Handle("/", fs)
log.Println("listening on port 5000")
http.ListenAndServe(":5000", nil)
}
这同时提供HTML和CSS文件,但不允许采用:something
形式的路由。我不知道如何拥有这两个功能。
答案 0 :(得分:2)
您的原始解决方案就在附近,您所要做的就是添加一个分支:
if r.URL.Path == "/" {
http.ServeFile(w, r, "./web/index.html")
} else if r.URL.Path == "/styles.css" {
http.ServeFile(w, r, "./web/styles.css")
} else {
// ...
当然可以根据需要进行调整-例如,您可以使用strings.HasSuffix
检查任何以“ .css”结尾的文件。