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.
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)
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With