我遵循GoLang教程
here,但无论出于何种原因,我都无法让应用程序服务于css和js.如果我在没有go服务器的情况下运行静态页面,页面css工作正常.另一方面,当我运行go服务器时,css不起作用.
这是我的html类似:
<link rel="stylesheet" href="../assets/css/bootstrap.min.css"> <link rel="stylesheet" href="../assets/css/bootstrap-theme.min.css"> <link rel="stylesheet" href="../assets/css/custom.css"> . . . then under the body tag <script src="../assets/js/jquery.min.js"></script> <script src="../assets/js/bootstrap.min.js"></script> . . .
我的文件树看起来像这样
如何让我的go应用程序提供我需要的css和javascript?
问题已经解决了,这里是工作主要的:
func main() { http.HandleFunc("/view/",makeHandler(viewHandler)) http.HandleFunc("/edit/",makeHandler(editHandler)) http.HandleFunc("/save/",makeHandler(saveHandler)) http.HandleFunc("/index/",makeHandler(indexHandler)) http.Handle("/static/",http.StripPrefix("/static/",http.FileServer(http.Dir("static")))) http.ListenAndServe(":8080",nil) }
这是我正在使用的处理程序的示例
func indexHandler(w http.ResponseWriter,r *http.Request,title string) { p := &Page{Title: title} err := templates.ExecuteTemplate(w,"index.html",p) if err != nil { http.Error(w,err.Error(),http.StatusInternalServerError) } }
解决方法
您可以像这样提供静态文件的目录:
http.Handle("/",http.FileServer(http.Dir("css/")))
将在/提供您的css目录.当然,您可以选择任何路径中的任何目录.
我可能会确保静态路径不会妨碍其他路径并使用类似的东西.
http.Handle("/static/",http.FileServer(http.Dir("static"))))
将js和css放在项目中的static目录中.然后,它将在domain.com/static/css/filename.css和domain.com/static/js/filename.js上提供服务.
StripPrefix方法删除前缀,因此它不会尝试搜索例如在static / css / filename.css的静态目录中,当然,它不会找到.它会在静态目录中查找css / filename.css,这是正确的.