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

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值