• 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()继续执行...") 
            }
            
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    测试开发进阶之路,2020 我们砥砺同行!
    【上海/北京/杭州】七牛云工程效率部直聘
    测试开发基础|一文搞定计算机网络(一)
    点点点工程师真的要被淘汰吗?
    电商性能测试实战 | JMeter 插件 Ultimate Thread Group 完成梯度递增场景的压测
    将H264与AAC打包Ipad可播放的TS流的总结
    Ubuntu阿里云搭建Mono.net环境
    利用正则表达式排除特定字符串
    你敢不敢不要让我这么忙
    离我而去的附录H
  • 原文地址:https://www.cnblogs.com/guo-s/p/13963134.html
Copyright © 2020-2023  润新知