PHPer的Go之路 --异常处理
简介
异常处理
panic
php
使用 try...catch
对异常进行捕获和处理,在 go
中 使用 panic 抛出。
package main
import "fmt"
func main() {
defer func() {
fmt.Println("defer会执行")
}()
a := 0
if (a == 0) {
panic("除数是0")
}
c := 100 / a
fmt.Printf("上面出现异常,不会执行到这里")
fmt.Printf("%d", c)
}
recover
在php
中对异常的捕获和处理,避免程序崩溃,使用的是try...catch...finally
,在go
中,对应的实现方式是:通过 recover() 函数对 panic 进行捕获和处理,panic 的捕获和其他代码的恢复执行需要放到 defer 语句中完成。
package main
import "fmt"
func main() {
defer func() {
if err := recover(); err != nil {
fmt.Printf("程序执行报错了: %v\n", err)
}
}()
a := 0
if (a == 0) {
panic("除数是0")
}
c := 100 / a
fmt.Printf("上面出现异常,不会执行到这里")
fmt.Printf("%d", c)
}