【GoLang】GoLang 错误处理 -- 异常处理思路示例
代码:
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 错误处理 -- 异常处理思路示例相关推荐
- Golang错误和异常处理的正确姿势
Golang错误和异常处理的正确姿势 错误和异常是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从 ...
- DataWhale Golang(十、异常处理)
DataWhale & Golang(十.异常处理) 学习大纲: 目录 DataWhale & Golang(十.异常处理) 学习大纲 10.异常处理 10.1 error 注意 10 ...
- python里try和except用法_Python中的错误和异常处理简单操作示例【try-except用法】...
本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...
- python的try和except用法_Python中的错误和异常处理简单操作示例【try-except用法】...
本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...
- python自定义全局异常_flask中主动抛出异常及统一异常处理代码示例
本文主要介绍的是flask中主动抛出异常及统一异常处理的相关内容,具体如下. 在开发时,后台出现异常 ,但不想把异常显示给用户或者要统一处理异常时,可以使用abort主动抛出异常,再捕获异常返回美化后 ...
- PHP错误和异常处理
[TOC] PHP错误和异常处理 PHP的错误和异常是两个概念PHP的错误处理:1.语法错误2.环境错误3.逻辑错误PHP的异常类型: PHP7的错误和异常 PHP 7 改变了大多数错误的报告方式. ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第36讲:PHP错误与异常处理
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第36讲:PHP错误与异常处理 错误处理是php程序设计语言的一个重要的部分,深入研究php中错误和异常处理机制,合理使用die 语句,创建一个自定义的错误函 ...
- PHP加密时遇到try错误,深入学习PHP错误与异常处理
一.PHP异常处理机制 由于我的工作岗位性质,我绝大部分的开发工作涉及到的操作风险都非常高,而且很频繁地使用其他部门提供的接口.所以,对于程序中可能出现的异常和错误都要有相应的处理方法,否则遗漏的话会 ...
- PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)
PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...
最新文章
- Swift typealias使用
- C - Log Calculator FZU - 2036
- bash脚本编程入门_Bash编程入门
- Error: Cannot find module
- 11 国股市熔断,“祸及”程序员?!
- 从零开始学安全(七)●Linux基础命令学习笔记
- 计算机网络第七版-《软件工程》试题(第4套含答案)
- 基于SATI的建筑智能化最新调查与进展
- 微信小程序对接串口摄像头
- 使用BeanUtils.populate遇到的bug
- python 爬虫:爬取91job竞赛题库
- 如何生成随机数(模拟掷骰子的过程)-C语言
- Win10 系统下安装 vim
- GitLab安装使用(SSH+Docker两种方式)
- 从耦合微带线到近、远端串扰
- Google Assistant SmartHome 入门指南
- RSTP P/A机制分析
- illustrator插件--常用功能开发--绘制手提袋--js脚本开发--AI插件
- 学而不思则罔,学而不思则殆-年终总结
- 认认真真推荐几个Python数据分析公众号
热门文章
- 机器人学习--ROS/AMCL实现初始化粒子撒满整张地图和分步收敛
- 语音信号处理之(一)动态时间规整(DTW)
- 如何欺骗服务器时间_域名劫持会怎样?如何解决域名劫持
- Debug Docker: Error response from daemon: dial unix docker.raw.sock: connect: connection refused
- 【Python】Python办公自动化 | 一键给PDF文件加密,超方便
- 【机器学习基础】结合论文理解XGBoost推导过程
- 【数据分析】离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
- 【职场】肺腑之言,给即将参加秋招的同学一点建议
- 袋鼯麻麻——智能购物平台
- 首次摆脱对梯度的依赖,CMU等开源Score-CAM:基于置信分数的视觉可解释性