序言
异常是一个很重要的语言特性,go也支持异常,但是要支持的更加简洁。怎么学习go的异常,一是学习go的范式,二是学习go和java对比。
go的范式
在C语言中,是怎么返回异常的,是使用一个全局区,保存异常,当异常发生是,用geterror去获取异常。go借鉴了这种做法。
在go中,是这么干的:
func getsomething() (string, error) {
return "test", errors.New("error")
}
那么,调用
if v, err = getsomething(); err != nil {
// do something
}
首先,和C一样,非常熟悉吧,而且非常简洁,特别注意的是,上面这是go对于异常的一个范式,go的函数库基本都在这么用。
panic和recover
和java要对比一下异常处理
try{
// do something
} catch(Exception e) {
// do something
}
首先,go抛出异常使用
panic(errors.New("error")
go捕获异常处理呢
func getsomething() (string, error) {
def func recovers() {
if err := recover(); error != nil{
// do something
}()
// do something
panic(errors.New("error")
}
上面的代码在抛出异常前会调用defer函数,会把异常截获下来处理掉。看起来干净利落
小结
go的异常处理,学习了C的异常处理,也学习了java面向对象的异常处理,并且简化了,表达起来干净利落。