使用julienschmidt httprouter简化重复的错误处理

时间:2015-09-09 16:38:30

标签: go

Golang.org有一篇关于如何做到这一点的博文: http://blog.golang.org/error-handling-and-go

他们基本上是一个新类型

type appHandler func(http.ResponseWriter, *http.Request) error

实现http.Handler接口,如此

func (fn appHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if err := fn(w, r); err != nil {
        http.Error(w, err.Error(), 500)
    }
}

有了这个,你就可以在handleFunc上返回错误了。

但我使用的是julienschmidt httprouter并使用函数而不是实现http.Handler的接口。我喜欢使用这个路由器,因为它支持命名参数。

如何在httprouter.Handler函数周围包装“something”以便我可以返回错误并返回其他内容?

有没有办法防止重复的错误处理?我找不到办法。

1 个答案:

答案 0 :(得分:4)

使用闭包:

type Handle func(http.ResponseWriter, *http.Request, Params)

type ErrHandle func(http.ResponseWriter, *http.Request, Params) error

func (eh ErrHandle) ToHandle() Handle {
    return func(w http.ResponseWriter, r *http.Request, p Params) {
        if err := eh(w, r, p); err != nil {
            http.Error(w, err.Error(), 500)
        }
    }
}