天天看點

Go學習筆記:panic()和recover()

如何了解:

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()

}