- 直接退出
log.Fatal("xxx")
- 引发异常,并退出
这个panic
可以类比 python 中的 raise、java 中的 throw, 这样抛出的异常是一个堆栈信息,能够追溯代码错误的位置,这个在使用时我用着更顺手
log.Panic("xxx")
恢复 panic 引发的异常使用 recover
func main(){
var s sync.WaitGroup
for i:=0;i<10;i++{
s.Add(1)
go func(i int){
defer func(){
if err := recover();err!=nil{
log.Println("this is error",err)
}
s.Done()
log.Println(i,"is over")
}()
log.Panic(i,"i want panic")
}(i)
}
s.Wait()
}
但是需要注意,recover 之后并不会打印 panic 的堆栈信息。
网友评论