代码:

package mainimport ("fmt"//    "testing"
)var Pkg = "packageName"type Err struct {Pkg  stringInfo stringPrev error
}func (e *Err) Error() string {if e.Prev == nil {return fmt.Sprintf("%s: %s", e.Pkg, e.Info)}return fmt.Sprintf("%s: %s\n%v", e.Pkg, e.Info, e.Prev)
}func me(err error, format string, args ...interface{}) *Err {if len(args) > 0 {return &Err{Pkg:  Pkg,Info: fmt.Sprintf(format, args...),Prev: err,}}return &Err{Pkg:  Pkg,Info: format,Prev: err,}
}func ce(err error, format string, args ...interface{}) {if err != nil {panic(me(err, format, args...))}
}func ct(err *error) {if p := recover(); p != nil {if e, ok := p.(error); ok {*err = e} else {panic(p)}}
}func oe(e error) error {var ret error = efor err, ok := ret.(*Err); ok && err.Prev != nil; err, ok = ret.(*Err) {ret = err.Prev}return ret
}func foo() (err error) {defer ct(&err)ce(bar(), "call bar")return
}func bar() (err error) {defer ct(&err)ce(baz(), "call baz")return
}func baz() (err error) {return me(nil, "baz")
}func main() {ce(foo(), "call foo")
}

输出:

panic: packageName: call foo
packageName: call bar
packageName: call baz
packageName: bazgoroutine 1 [running]:
panic(0x491000, 0xc420016300)/opt/golang/go/src/runtime/panic.go:500 +0x1a1
main.ce(0x4f9140, 0xc4200162d0, 0x4a741f, 0x8, 0x0, 0x0, 0x0)/opt/golang/workspace/src/github.com/junneyang/letsgo/error_test/error_common.go:40 +0x97
main.main()/opt/golang/workspace/src/github.com/junneyang/letsgo/error_test/error_common.go:79 +0x69
Error: process exited with code 2.

参考资料:

http://reusee.github.io/post/error-handling/

https://github.com/reusee/codes/blob/master/err/err.go

https://github.com/golang/go/blob/master/src/encoding/gob/error.go

【GoLang】GoLang 错误处理 -- 异常处理思路示例相关推荐

  1. Golang错误和异常处理的正确姿势

    Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...

  2. DataWhale Golang(十、异常处理)

    DataWhale & Golang(十.异常处理) 学习大纲: 目录 DataWhale & Golang(十.异常处理) 学习大纲 10.异常处理 10.1 error 注意 10 ...

  3. python里try和except用法_Python中的错误和异常处理简单操作示例【try-except用法】...

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...

  4. python的try和except用法_Python中的错误和异常处理简单操作示例【try-except用法】...

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...

  5. python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例

    本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...

  6. PHP错误和异常处理

    [TOC] PHP错误和异常处理 PHP的错误和异常是两个概念PHP的错误处理:1.语法错误2.环境错误3.逻辑错误PHP的异常类型: PHP7的错误和异常 PHP 7 改变了大多数错误的报告方式. ...

  7. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第36讲:PHP错误与异常处理

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第36讲:PHP错误与异常处理 错误处理是php程序设计语言的一个重要的部分,深入研究php中错误和异常处理机制,合理使用die 语句,创建一个自定义的错误函 ...

  8. PHP加密时遇到try错误,深入学习PHP错误与异常处理

    一.PHP异常处理机制 由于我的工作岗位性质,我绝大部分的开发工作涉及到的操作风险都非常高,而且很频繁地使用其他部门提供的接口.所以,对于程序中可能出现的异常和错误都要有相应的处理方法,否则遗漏的话会 ...

  9. PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)

    PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...

最新文章

  1. Swift typealias使用
  2. C - Log Calculator FZU - 2036
  3. bash脚本编程入门_Bash编程入门
  4. Error: Cannot find module
  5. 11 国股市熔断,“祸及”程序员?!
  6. 从零开始学安全(七)●Linux基础命令学习笔记
  7. 计算机网络第七版-《软件工程》试题(第4套含答案)
  8. 基于SATI的建筑智能化最新调查与进展
  9. 微信小程序对接串口摄像头
  10. 使用BeanUtils.populate遇到的bug
  11. python 爬虫:爬取91job竞赛题库
  12. 如何生成随机数(模拟掷骰子的过程)-C语言
  13. Win10 系统下安装 vim
  14. GitLab安装使用(SSH+Docker两种方式)
  15. 从耦合微带线到近、远端串扰
  16. Google Assistant SmartHome 入门指南
  17. RSTP P/A机制分析
  18. illustrator插件--常用功能开发--绘制手提袋--js脚本开发--AI插件
  19. 学而不思则罔,学而不思则殆-年终总结
  20. 认认真真推荐几个Python数据分析公众号

热门文章

  1. 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
  2. 语音信号处理之(一)动态时间规整(DTW)
  3. 如何欺骗服务器时间_域名劫持会怎样?如何解决域名劫持
  4. Debug Docker: Error response from daemon: dial unix docker.raw.sock: connect: connection refused
  5. 【Python】Python办公自动化 | 一键给PDF文件加密,超方便
  6. 【机器学习基础】结合论文理解XGBoost推导过程
  7. 【数据分析】离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
  8. 【职场】肺腑之言,给即将参加秋招的同学一点建议
  9. 袋鼯麻麻——智能购物平台
  10. 首次摆脱对梯度的依赖,CMU等开源Score-CAM:基于置信分数的视觉可解释性