錯誤處理
前面的分享加了兩個功能,一個是編輯功能,一個儲存功能
在我們的程式中有幾個地方其實是忽略了錯誤的處理。
這是不好的做法,尤其是因為這樣的做法發生錯誤時,程式會出現意外行為。
更好的解決方案是處理錯誤並向使用者返回錯誤訊息。
這樣,如果出現問題,伺服器將完全按照我們想要的方式運行,並且可以通知使用者。
首先,讓我們處理renderTemplate中的錯誤:
func renderTemplate(w http.ResponseWriter, templateName string, p *Page) { t, err := template.ParseFiles("template/" + templateName + ".html") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } err = t.Execute(w, p) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return }}
http.Error函數發送指定的HTTP響應代碼(在本例中為“內部伺服器錯誤”)和錯誤訊息。
將這個放在一個單獨的功能中的決定已經取得了成效。
現在讓我們修複saveHandler:
func saveHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[len("/save/"):] body := r.FormValue("body") p := &Page{ Title: title, Body: []byte(body), } err := p.save() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } http.Redirect(w, r, "/view/"+title, http.StatusFound)}
p.save()期間發生的任何錯誤都將報告給使用者