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