golang学习笔记 defer+recover错误回收 自定义错误
自定义错误使用到函数。
·
defer+recover错误回收
示例:
程序中出现错误/恐慌后程序被中断无法执行
package main
import "fmt"
func main() {
kkk()
fmt.Println("上面函数已经成功执行")
}
func kkk() {
num1 := 2
num2 := 0
num3 := num1 / num2
fmt.Println(num3)
}

使用defer+recover错误回收处理:
func recover
func recover() interface{}
内建函数recover允许程序管理恐慌过程中的Go程。在defer的函数中,执行recover调用会取回传至panic调用的错误值,恢复正常执行,停止恐慌过程。若recover在defer的函数之外被调用,它将不会停止恐慌过程序列。在此情况下,或当该Go程不在恐慌过程中时,或提供给panic的实参为nil时,recover就会返回nil。
package main
import "fmt"
func main() {
kkk()
fmt.Println("上面函数已经成功执行")
}
func kkk() {
defer func() { //defer+recover来捕获错误
if err := recover(); err != nil {
//调用recover来捕获错误
fmt.Println("err是", err)
fmt.Println("错误已被捕获")
}
}()
num1 := 2
num2 := 0
num3 := num1 / num2
fmt.Println(num3)
}

自定义错误
自定义错误使用到函数
func New
func New(text string) error
使用字符串创建一个错误,请类比fmt包的Errorf方法,差不多可以认为是New(fmt.Sprintf(…))。
package main
import (
"errors"
"fmt"
)
func main() {
err := kkk()
if err != nil {
fmt.Println(err)
}
fmt.Println("上面函数已经成功执行")
}
func kkk() (err error) {
num1 := 2
num2 := 0
if num2 == 0 {
return errors.New("除数不能为零")
} else {
num3 := num1 / num2
fmt.Println(num3)
return nil
}
}

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)