从Delphi到Go——异常处理
Delphi
try...finally...end
//创建、打开、加锁等
try
//具体处理
finally
//释放、关闭、解锁等
end;
raise
raise Exception.Create("异常信息"); //手动抛出异常
try...except...end
try
//可能产生异常的语句块
except
//异常的相关处理
on E: Exception do
begin
//对应类型的异常的处理
end;
end;
Go
defer
加defer
的语句会延迟到函数调用结束返回时才执行,相当于finally...end
区。存在多个defer
语句时,最先出现的总是最后才执行。
func F(){
//打开、加锁等
defer //关闭、解锁等
//具体处理
}
panic
panic(异常信息)
recover
func FF(){
defer func(){
e := recover()
//异常处理
}()
//可能产生异常的语句块,或调用 panic() 抛出异常
}
虽然panic/recover
组合可以模拟try...except...end
,但不建议在编写普通函数时也经常性使用这种特性。
error
error
是Go
内置的错误接口,也是官方推荐的优先使用的错误处理方法。
Go
很多方法最后一个返回值都是error
类型的err
,在进行下一步操作前,需要先判断err
是否为nil
,为nil
则继续,否则进行错误处理。
r, e := callfunc()
if e != nil {
//错误处理
} else {
//后续操作
}
至于自定义错误
,在学完接口之后再说吧。