从其它平台迁移而来


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;

Go

defer

defer的语句会延迟到函数调用结束返回时才执行,相当于finally...end区。存在多个defer语句时,最先出现的总是最后才执行。

1
2
3
4
5
func F(){
  //打开、加锁等
  defer //关闭、解锁等
  //具体处理
}

panic

1
panic(异常信息)

recover

1
2
3
4
5
6
7
func FF(){
  defer func(){
    e := recover()
    //异常处理
  }()
  //可能产生异常的语句块,或调用 panic() 抛出异常
}

虽然panic/recover组合可以模拟try...except...end,但不建议在编写普通函数时也经常性使用这种特性。

error

errorGo内置的错误接口,也是官方推荐的优先使用的错误处理方法。

Go很多方法最后一个返回值都是error类型的err,在进行下一步操作前,需要先判断err是否为nil,为nil则继续,否则进行错误处理。

1
2
3
4
5
6
r, e := callfunc()
if e != nil {
  //错误处理
} else {
  //后续操作
}

至于自定义错误,在学完接口之后再说吧。