先看看panic是干什么的
執行到panic的地方,會出現異常。后面的代碼不會執行,加了defer,panic之前會執行defer,加了recover會修復后繼續執行
defer要在可能引發panic之前定義
recover()必須搭配defer使用
import ("fmt")
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("run f2")panic("出現嚴重錯誤!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
運行結果:
run f1
run f2
panic: 出現嚴重錯誤!.....后面不執行
如果出錯前,還要關閉連接等
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("打開數據庫連接...")defer func(){fmt.Println("釋放數據庫連接...")}()panic("出現嚴重錯誤!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
輸出結果:
run f1
打開數據庫連接...
釋放數據庫連接...
panic: 出現嚴重錯誤!........后面不執行
加上recover
func f1() {fmt.Println("run f1")}
func f2() {fmt.Println("打開數據庫連接...")defer func(){err := recover()fmt.Println(err)fmt.Println("釋放數據庫連接...")}()panic("出現嚴重錯誤!")fmt.Println("run after")}func f3() {fmt.Println("run f3")}func main() {f1()f2()f3()}
執行結果
run f1
打開數據庫連接...
出現嚴重錯誤!
釋放數據庫連接...
run f3