dongwuwan5646 2015-09-09 16:38
浏览 59
已采纳

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

Golang.org has a blogpost about how to do this: http://blog.golang.org/error-handling-and-go

They basically make a new type

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

Which implements the http.Handler interface like so

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

And with this you are able to return errors on your handleFunc which is great.

But I am using the julienschmidt httprouter and that uses a function rather than an interface that implements http.Handler. I like to use this router because it supports named parameters.

How can I wrap "something" around the httprouter.Handler function so that I can return errors and return other stuff aswel?

Is there a way to do this to prevent repetitive error handling? I could not find a way.

  • 写回答

1条回答 默认 最新

  • dswwuo1223 2015-09-09 18:21
    关注

    Use closures:

    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)
            }
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?