如何了解:
1、調用panic函數相當于throw一個異常,逐層啟動異常處理流程。在調用panic之前defer的操作會在調用panic後立即執行。
2、調用recover函數相當于catch了異常,會中止異常處理流程,并可以傳回這個異常。
3、panic函數接受一個參數,任意類型,無傳回值;
4、recover函數沒有參數,傳回值就是異常本身;
5、一般,recover函數放在defer後面的一個匿名函數中執行。個人認為還應該放在函數的首部;
一個例子
package main
import (
"fmt"
)
func work() {
Log(10)
panic("ERROR!")
Log(100)
}
func Log(args ...interface{}) {
fmt.Println(args...)
}
func main() {
defer func() {
if r := recover(); r != nil {
Log(r)
}
}()
work()
}