Go基礎學習記錄 - 編寫Web應用程序 - 錯誤處理

錯誤處理

前面的分享加了兩個功能,一個是編輯功能,一個保存功能html

在咱們的程序中有幾個地方實際上是忽略了錯誤的處理。
這是很差的作法,尤爲是由於這樣的作法發生錯誤時,程序會出現意外行爲。
更好的解決方案是處理錯誤並向用戶返回錯誤消息。
這樣,若是出現問題,服務器將徹底按照咱們想要的方式運行,而且能夠通知用戶。
首先,讓咱們處理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()期間發生的任何錯誤都將報告給用戶code

相關文章
相關標籤/搜索