已解决!!
GO中怎么调用html文件,html怎么应用css设置?
- 这个问题好难….弄了两天了还是没有解决。
工程的目录结构如下
其中pkg是编译main.go之后输出的目录。一开始输出是默认在c盘的Temp文件下边。
main.go代码如下
package main
import (
"net/http"
"log"
"html/template"
"os"
"path/filepath"
)
var dir, sysPath string
func main() {
execpath, _ := os.Executable()
sysPath = filepath.Dir(execpath)
dir = filepath.Join(sysPath, "/index.html")
http.HandleFunc("/", requestHandler)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe : ", err)
}
}
func requestHandler(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles(dir)
if err != nil {
log.Fatal("template.ParseFiles : ", err)
return
}
t.Execute(w, nil)
}
通过 os.Executable() 读到了当前执行的目录,然后找到html所在的路径,可以通过路由找到html,并在前端显示,但是html中调用的css并没有执行到。
<link type="text/css" rel="stylesheet" href="static/css/header_style.css">
我看书上都是直接给的相对路径的例子,怎么到了我这里就这么坑T^T。
求大神帮忙解答~我找到了答案之后也会把这个问题进行更新
======================2018-7-23==========================
这个问题终于解决了~
- 1.首先是相对路径的404问题,这个是因为我之前用的是idea运行go程序的,上边也说了执行的时候会生成一个.exe文件,这个文件所在的路径才是执行路径,这个路径如果自己不配置的话,是在C盘自动生成的。而 /index.html 我们写的这个相对路径是程序所在目录,并不是执行目录。进入到项目main.go所在目录,通过命令行执行 go run main.go 就可以解决404问题了
- 2.调用不到css文件,这个通过静态路由的配置就可以解决了。在http包中有两个方法:
http.Handle(pattern string, handler Handler)
http.HandleFunc(pattern string, handler Handler)
这两个路由配置的函数是不同的,其种Handle是针对静态资源配置路由,HandleFunc是针对动态页面配置路由。所以只要把要调用的css等文件通过Handle配置一下路由就可以了。
可运行项目代码如下~(目录结构就是上边的图片)
package main
import (
"net/http"
"log"
"html/template"
)
func main() {
http.Handle("/css/", http.FileServer(http.Dir("templates")))
http.Handle("/js/", http.FileServer(http.Dir("templates")))
http.HandleFunc("/index", requestHandler)
http.HandleFunc("/404", notFound)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe : ", err)
}
}
func requestHandler(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("index.html")
if err != nil {
log.Fatal("template.ParseFiles : ", err)
return
}
t.Execute(w, nil)
}
func notFound(w http.ResponseWriter, r *http.Request) {
t, err := template.ParseFiles("templates/html/404.html")
if err != nil {
log.Fatal("template.ParseFiles : ", err)
return
}
t.Execute(w, nil)
}