go 對靜態文件的服務寫法:css
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))函數
本身玩的時候遇到的問題:spa
自定義Handler 實現serveHTTP() 方法來動態match路由 路由定義爲:map[string]func(http.ResponseWriter, *http.Request) 路徑match路由函數 靜態文件的請求也會走本身實現的serveHTTP() 方法 會在map中匹配不到路由code
致使靜態文件(模板中js和css等)導入失敗orm
後來本身看了看源碼 找到一個low b的解決辦法 在serveHTTP() 判斷是否請求靜態資源(規則自定義)調用http.StripPrefix("/static/", http.FileServer(http.Dir("static")))返回的handler的serveHTTP方法實現靜態文件服務ip
ServeHTTP:
func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Println("outer:", r.URL.Path) if h, ok := mux[r.URL.String()]; ok { h(w, r) } else if strings.HasPrefix(r.URL.String(), "/static/") { had := http.StripPrefix("/static/", http.FileServer(http.Dir("static"))) had.ServeHTTP(w, r) } else { http.Error(w, "404 not found", 404) } }