defer() recover() 抛出错误继续执行
案例:
package main
import "fmt"
func main() {
divide()
fmt.Println("继续执行李萌萌")
}
func divide(){
num1 := 100
num2 := 0
num := num1/num2
fmt.Println("num=", num)
}
执行结果:
案例:使用 defer() + recover()
package main
import "fmt"
func main() {
divide()
fmt.Println("继续执行李萌萌")
}
func divide() {
defer func() {//这里创建一个匿名函数
err := recover()
if err != nil {
fmt.Println("error:", err)//这里抛出错误
}
}() //这里执行匿名函数
num1 := 100
num2 := 0
num := num1/num2
fmt.Println("num=", num)
}
注意:匿名函数的执行方式是在函数体结束后以()调用
errors.New() panic() 自定义错误
案例:
package main
import(
"errors"
"fmt"
)
func main() {
err := divide(100, 0)
if err != nil {
panic(err)
}
fmt.Println("程序执行了panic,这条语句不会执行")
}
func divide(num1 int, num2 int) (err error){
if num2 == 0 {
return errors.New("除数不能为0")
}
num := num1/num2
fmt.Println("num=", num)
return nil
}
执行结果: