异常处理: 使用 defer,panic,recover
go中抛出一个panic异常,然后在defer中通过recover捕获这个异常,进行处理
package main import ( "fmt" ) func main() { defer func() { err := recover() if err != nil { fmt.Println("错误提示:",err) fmt.Println("进行错误处理 ......") } }() num1 := 10 num2 := 0 res := num1 / num2 fmt.Println("计算结果:",res) }
自定义报错: 使用errors.New 和 panic 内置函数
errors.New("错误说明"),会返回一个error类型的值,表示一个错误
panic内置函数,接收一个interface{}类型的值作为参数(可以是任何值),可以接收error类型的变量,输出错误信息,并退出程序。
package main import ( "fmt" "errors" ) func readConf(name string) (err error) { if name == "config.ini" { return nil } else { return errors.New("读取文件失败.....") } } func test() { // 处理自定义报错 defer func() { err := recover() if err != nil { fmt.Println("错误提示:",err) fmt.Println("进行错误处理 ......") } }() err1 := readConf("lalalalala") if err1 != nil { panic(err1) } fmt.Println("test继续执行") } func main() { test() fmt.Println("main执行完毕") }
package main
import (
"fmt"
"errors"
)
func readConf(name string) (err error) {
if name == "config.ini" {
return nil
} else {
return errors.New("读取文件失败.....")
}
}
func test() {
// 处理自定义报错
defer func() {
err := recover()
if err != nil {
fmt.Println("错误提示:",err)
fmt.Println("进行错误处理 ......")
}
}()
err1 := readConf("lalalalala")
if err1 != nil {
panic(err1)
}
fmt.Println("test继续执行")
}
func main() {
test()
fmt.Println("main执行完毕")
}