go web: 4 处理默认错误
来源:互联网 发布:古墓丽影8mac配置要求 编辑:程序博客网 时间:2024/06/13 17:46
panic会导致程序崩溃
在go web中,难免会引发panic。比如用户在一次请求中输入了不正确的数据导致除0或者数组越界。如果不设置默认的错误处理,那程序就会崩溃退出,这显然是不能接受的。所以要实现一个默认的总错误处理。
代码
依前文,现在项目中已经有如下结构:
src--| handlers--| test--| test.go logger--| logger.go | main.go
在go web: 3 中间件和路由中,我们实现了中间件。没错,handler默认的错误,我们就要从这个总入口入手:
把中间件处理改成:
// myHost 做中间件和Handler全局错误使用。免得一个panic把全局挂挂func myHost(handler http.Handler) http.Handler { ourFunc := func(w http.ResponseWriter, r *http.Request) { var err error defer func() { rec := recover() if rec != nil { switch t := rec.(type) { case string: err = errors.New(t) case error: err = t default: err = errors.New("Unknown error") } http.Error(w, err.Error(), http.StatusInternalServerError) logger.Errorln( fmt.Sprintf("%s %s \n %s", r.Method, r.URL, err.Error())) } }() //记录时间 start := time.Now() handler.ServeHTTP(w, r) logger.Infoln( fmt.Sprintf("%s %s %s", r.Method, r.URL, time.Now().Sub(start))) } return http.HandlerFunc(ourFunc)}
现在我们尝试在test.SayHello
这个handler中引发一个panic,不用担心,程序会记一个日志,而不是以挂挂告终了。
阅读全文
0 0
- go web: 4 处理默认错误
- Go语言错误处理
- GO 语言错误处理
- Go语言错误处理
- Go错误处理
- Go错误处理
- Error handling and Go go 优雅的错误处理
- Go起步:9、Go的错误处理--自定义异常
- Go 语言的错误处理机制
- Go语言错误处理小例子
- Go语言基础入门--函数,错误处理
- Go语言学习九:接口、错误处理
- Go语言中的错误处理系统
- Go语言错误与异常处理机制
- go语言学习笔记(10) 错误处理
- web.xml错误处理
- Web系统错误日志处理
- web编程中的错误处理
- 使用Java8 Files类读写文件
- 数模算法-图象处理算法
- 生活随笔:怀念在广州大学的日子
- python基础4
- Reinforcement Learning强化学习系列之一:model-based learning
- go web: 4 处理默认错误
- NuttX 入门笔记6 STM32F103C8T6(STM32f103-minimum) 多路PWM测试-RGBLED
- Android,我么用原生还是混合?
- CReLU激活函数
- 一些软件思想
- Javascript的对象及原型
- virtualenv+nginx+uwsgi+django配置
- 重构优化
- Mysql面试总结