GO语言异常处理机制panic和recover分析
本文实例分析了GO语言异常处理机制panic和recover。分享给大家供大家参考。具体如下:
Golang有2个内置的函数panic()和recover(),用以报告和捕获运行时发生的程序错误,与error不同,panic-recover一般用在函数内部。一定要注意不要滥用panic-recover,可能会导致性能问题,我一般只在未知输入和不可靠请求时使用。
golang的错误处理流程:当一个函数在执行过程中出现了异常或遇到panic(),正常语句就会立即终止,然后执行defer语句,再报告异常信息,最后退出goroutine。如果在defer中使用了recover()函数,则会捕获错误信息,使该错误信息终止报告。
示例:
packagemain
import( "log" "strconv" )
//捕获因未知输入导致的程序异常 funccatch(nums...int)int{ deferfunc(){ ifr:=recover();r!=nil{ log.Println("[E]",r) } }()
returnnums[1]*nums[2]*nums[3]//indexoutofrange }
//主动抛出panic,不推荐使用,可能会导致性能问题 functoFloat64(numstring)(float64,error){ deferfunc(){ ifr:=recover();r!=nil{ log.Println("[W]",r) } }()
ifnum==""{ panic("paramisnull")//主动抛出panic }
returnstrconv.ParseFloat(num,10) }
funcmain(){ catch(2,8) toFloat64("") }