内容简介:golang 使用error接口作为标准错误接口,通常情况下错误处理方式error作为函数返回值时应该放在最后一个返回值:eg:
基本概念
- 错误:意料之内,可能出的问题, 比如网络连接超时,json解析错误等
- 异常:意料之外,不应该出的问题,比如空指针异常,下标溢出等异常
错误处理
golang 使用error接口作为标准错误接口,
通常情况下错误处理方式
if err != nil{ //错误处理逻辑 }
error作为函数返回值时应该放在最后一个返回值:eg:
func get()(res string, err error){ return }
使用error作为返回值的规范是函数体内有可能产生多种错误时返回error,当仅有一种error的可能或者类型时应该用bool类型代替,这样更简洁,eg:
//此方法种只有一种逻辑上的错误,不应该返回error, 推荐使用checkNumAreaB函数的写法 func checkNumArea(num int) error { if num > 100{ return errors.New("超出值域") } return nil } func checkNumAreaB(num int) bool { if num > 100{ return false } return true }
异常处理
The panic built-in function stops normal execution of the current goroutine. When a function F calls panic, normal execution of F stops immediately. Any functions whose execution was deferred by F are run in the usual way, and then F returns to its caller. To the caller G, the invocation of F then behaves like a call to panic, terminating G's execution and running any deferred functions. This continues until all functions in the executing goroutine have stopped, in reverse order. At that point, the program is terminated and the error condition is reported, including the value of the argument to panic. This termination sequence is called panicking and can be controlled by the built-in function recover.
从官方介绍可知panic调用会使整个调用栈逆序终止,最终导致整个程序终止并输出调中栈信息, 可使用recover方法捕获异常而避免程序终结,生产环境种必须有此操作以避免程序终止
panic类似 java 的throw python的raise, recover 类似try catch
常用处理方式如下
func A(){ defer func(){ fmt.Println("3") }() defer func(){ if err := recover(); err != nil{ fmt.Println("err:", err) } }() panic("1") fmt.Println("2") } A() //outout: //err:1 //3
- defer的执行逻辑时LIFO,
- defer的执行是在函数执行完毕,return,panic之后的
- panic之后的逻辑不再执行
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- PHP 的错误机制总结
- 深入理解 JavaScript 错误处理机制
- 基于 lor.index 的错误处理机制设计
- Vue.js@2.6.10更新内置错误处机制,Fundebug同步支持相应错误监控
- go-carbon 1.2.6 版本发布,优化错误处理机制,弃用出错直接 panic 的粗暴处理方式
- Golang学习笔记之错误处理error、panic (抛出错误),recover(捕获错误)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入理解计算机系统(原书第3版)
Randal E.Bryant、David O'Hallaron / 龚奕利、贺莲 / 机械工业出版社 / 2016-11 / 139.00元
和第2版相比,本版内容上*大的变化是,从以IA32和x86-64为基础转变为完全以x86-64为基础。主要更新如下: 基于x86-64,大量地重写代码,首次介绍对处理浮点数据的程序的机器级支持。 处理器体系结构修改为支持64位字和操作的设计。 引入更多的功能单元和更复杂的控制逻辑,使基于程序数据流表示的程序性能模型预测更加可靠。 扩充关于用GOT和PLT创建与位置无关代码的......一起来看看 《深入理解计算机系统(原书第3版)》 这本书的介绍吧!