Go基础学习记录 - 编写Web应用程序 - 错误处理

DurbanZhang · · 876 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

错误处理

前面的分享加了两个功能,一个是编辑功能,一个保存功能

在我们的程序中有几个地方其实是忽略了错误的处理。
这是不好的做法,尤其是因为这样的做法发生错误时,程序会出现意外行为。
更好的解决方案是处理错误并向用户返回错误消息。
这样,如果出现问题,服务器将完全按照我们想要的方式运行,并且可以通知用户。
首先,让我们处理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()期间发生的任何错误都将报告给用户


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:DurbanZhang

查看原文:Go基础学习记录 - 编写Web应用程序 - 错误处理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

876 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传