Go - 22 Go 错误处理机制

1.在默认情况下,当发生错误后(panic),程序就会出现退出(崩溃);
2.如果我们希望,当发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行,还可以在捕获到错误后,给管理员一个提示(邮件,短信...);
 
Go语言追求简洁优雅,所以,Go语言不支持传统的try...catch...finally 这种处理;
Go中引入的处理方式为:defer, panic, recover;
这几个异常的使用场景可以这么简单描述,Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。
 
错误处理的好处:
    进行错误处理后,程序不会轻易挂掉,如果加入预警代码,就可以让程序更加健壮;
    示例:
        // 错误处理机制
        func errTest() {     
            // 加defer 来处理错误 + 匿名函数     
            defer func () {         
                err := recover() // 用来捕获错误         
                if err != nil { // 有错误处理             
                    fmt.Println("err===", err)             // err=== runtime error: integer divide by zero
                    // 可以加上错误报警机制             
                    fmt.Println("错误捕获到了发邮件给admin.@kuais.com")         
                }     
            }()     
            num1 := 10     
            num2 := 0     
            res := num1 / num2      
            fmt.Println("res==",res) 
        }
 
自定义错误:
    Go程序中,也支持自定义错误,使用errors.New 和 panic 内置函数;
    1.erros.New("错误说明")  会返回一个error类型的值,表示一个错误
    2.panic内置函数,接受一个interface{}类型的值(也就是任何值了)作为参数,可以接受error类型的变量,输出错误信息,并退出程序;
    示例:
        // 自定义错误测试
        // 一个读取文件名的函数 
        func readConf(filename string) (err error){     
                if filename == "config.ini"{         
                        return nil     
                }else{         // 返回一个自定义错误         
                        return errors.New("读取文件名错误...")     
                } 
        } 
        // 测试自定义错误函数 
        func selfErrortest(name string){     
                err := readConf(name)     
                if err != nil {         // 如果 读取文件发生错误,就会输出这个错误,并终止程序         
                        panic(err)     
                }     
                fmt.Println("selfErrortest()继续执行...") 
        }
        
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-11-12 11:49  以赛亚  阅读(167)  评论(0编辑  收藏  举报