• Go语言error错误处理


    error

    Go语言内置错误接口类型,任何类型只要是实现了Error()string方法,都可以传递error接口类型变量。Go语言典型的错误处理方式是将error作为函数最后一个返回值。在调用函数时,通过监测其返回的error值是否为nil来进行错误处理
    Go语言标准库提供的两个函数返回实现了error接口的具体类型实例,一般的错误可以使用如下两个函数进行封装,遇到复杂的错误,用户也可以自定义错误类型,只要实现error错误接口即可。

    func Errorf(format string, a ...interface{}) error {
    	return errors.New(fmt.Sprintf(format, a...))
    }
    
    func New(text string) error {
    	return *errorString{text}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    实际案例

    import "fmt"
    
    func math(x, y int) (int, error) {
    	if y == 0 {
    		return 0, fmt.Errorf("参数错误")
    	}
    	return x * y, nil
    }
    
    func main() {
    	// 一旦参数正确则执行相乘,并且异常值为空值
    	num1, err1 := math(1, 2)
    	if err1 == nil {
    		fmt.Println(num1)
    	}
    	// 一旦参数错误,则error返回错误信息
    	_, err2 := math(1, 0)
    	if err2 != nil {
    		fmt.Println(err2)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    错误和异常

    Go语言是一门类型安全的语言,其运行时不会出现无法捕捉的错误,也就是没有异常全是错误。
    错误分两类

    • 运行时错误,此类错误在运行时或者编写时就能被发现或者捕获,隐式或显式的抛出panic
    • 逻辑错误,就是程序可以正常运行,但是运行的结果是错误的。
      第一种错误无法避免,只能是尽量的recover住这些错误,避免因为一个错误导致整个程序崩溃。

    在实际的编程中,error和panic的使用应该遵循如下三条原则:

    • 程序局部代码执行结果不符合预期,这种行为不应该影响程序运行,此类场景应该使用函数返回error错误类型进行处理。
    • 程序运行时出现错误,Go语言会自动调用panic输出堆栈信息去定位错误,这个需要使用recover()去捕获该类异常。
    • 程序局部代码执行结果不符合预期,并且后续此结果对程序运行有重大影响,则需要手动调用panic去抛出异常终止程序运行。
  • 相关阅读:
    sqlite 合并两个数据库中的特定表
    JavaSE - 封装、static成员和内部类
    【无标题】qml与c++数据交互的一种方式
    C++标准库(第二版,作者_NicolaiMJosuttis)_第5章通用工具5.2.1shared_ptr
    JavaWeb-EL表达式
    faust勒索病毒:最新变种[nicetomeetyou@onionmail.org].faust袭击了您的计算机?
    C++设计模式_17_Mediator 中介者
    Mybatis使用注解实现复杂动态SQL
    python程序,放入docker容器中, 生成镜像
    11_博客管理系统_实现过程
  • 原文地址:https://blog.csdn.net/zhaohan___/article/details/134401801