【GoLang】GoLang 错误处理 -- 异常处理思路示例
2016-11-23 12:03
651 查看
代码:
输出:
参考资料:
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
package main import ( "fmt" // "testing" ) var Pkg = "packageName" type Err struct { Pkg string Info string Prev 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 = e for 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: baz goroutine 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 错误处理 -- 使用异常的思路进行处理
- Laravel中错误与异常处理的用法示例
- 【GoLang】GoLang 错误处理 -- 使用 error is value 的思路处理,检查并处理error
- Golang 错误和异常处理的正确姿势
- PHP错误和异常处理功能模块示例
- Golang错误和异常处理的正确姿势章
- ONLINE方式在线重建索引异常中断后遇到ORA-08104错误的处理思路
- golang 错误处理与异常
- 【GoLang】GoLang 错误处理 -- 官方推荐方式 示例
- PHP错误和异常处理功能模块示例
- C++ Coding Standards:错误处理和异常
- 第9章 异常与错误处理
- c++ 异常处理与错误号之间的选择
- "XXXXX.exe 中的0x7c921230 处未处理的异常: 用户断点"的错误原因
- 错误异常处理总结
- 错误处理和异常处理,你用哪一个
- 异常处理及日志错误信息备忘——都是那么低级的错误,唉~
- WCF 中的异常(错误)处理和编程规范
- C++编程规范之错误处理与异常(读书笔记)
- 一个处理数据库异常的类,按照错误码弹出提示信息