[TOC] ## 返回异常 ``` //方式一返回异常 func Sqrt(f float64) (float64, error) { if f < 0 { return 0, errors.New("math: square root of negative number") } // implementation } //抛出异常 func innerFunc() { //panic 接收错误信息 让recover() 去处理 panic(errors.New("Occur a panic!")) } ``` ## 接收异常 1. 方式一 ``` parentPath, err := os.Getwd() if err != nil { return nil, err } //todo ``` 1. 方式二 ``` func innerFunc() { //panic 接收错误信息 让recover() 去处理 panic(errors.New("Occur a panic!")) } func main() { //recover() 接受全局的异常 defer func() { if p := recover(); p != nil { fmt.Printf("Fatal error: %s\n", p) } }() innerFunc() } ``` 1. 方式三 统一走报错流程 ``` //全局接受异常 defer func() { if p := recover(); p != nil { fmt.Printf("Fatal error: %s\n", p) } }() connection, err := gorose.Open(DbConfig) //只有有错才接受异常 if err != nil { panic(err) } res,err := db.Table("user1").First() if err != nil { panic(err) } ```