golang中painc和recover的坑 Posted on 2020-01-12 | 本文记录一个golang的recover和painc的坑。 recover和painc1234567891011121314151617181920212223242526272829303132333435363738394041424344// 不能捕获func f1()){ recover() painc("exception")}// 不能捕获func f2(){ defer recover() painc("exception") }// 可以捕获func f3(){ defer func (){ recover() } painc("exception")}// 不能捕获func f4(){ defer func (){ func (){ recover() } } painc("exception")}// 不能捕获func f5(){ defer func(){ recover() } go func(){ painc("exception) }}// recover和painc的函数签名func painc(interface{})func recover() interface{} 结论 painc未捕获会直接终止应用 recover必须和defer一起用才有效 defer和recover必须隔一个函数栈 不能跨gorountine捕获painc recover的返回值是painc传入的值,当函数没有发生painc,那么recover将总是返回nil