36. Go 语言中的错误和异常处理

AI 概述
1.error 接口2. errors 包3. 异常处理4. 小结 在 Go 语言中没有与 Java 或者 .NET 类似的异常处理机制。Go 语言的开发者认为类似的异常处理已经被过多的使用了,这样的异常机制过度依赖上层代码对异常的处理,如果上层代码对异常的处理不到位会使程序出一些不易排查的 BUG。所以为了让开发者能够重视并...
目录
文章目录隐藏
  1. 1.error 接口
  2. 2. errors 包
  3. 3. 异常处理
  4. 4. 小结

在 Go 语言中没有与 Java 或者 .NET 类似的异常处理机制。Go 语言的开发者认为类似的异常处理已经被过多的使用了,这样的异常机制过度依赖上层代码对异常的处理,如果上层代码对异常的处理不到位会使程序出一些不易排查的 BUG。所以为了让开发者能够重视并正确的处理每一个可能会出现异常的函数,Go 语言采用返回值的形式来返回错误。这一机制,既可以让开发者真正理解错误处理的含义,也可以大大降低程序的复杂度。

1.error 接口

error 是系统自带的一个接口类型的自定义类型。

代码如下:

type error interface {
    Error() string
}

2. errors 包

Tips:包的概念会在后文的 Go 语言中的包管理中详细介绍

errors 包中包含了一个实现了 error 这个接口的结构体类型 errorString。我们可以直接使用包中的方法来自定义一些错误,从而返回我们希望被上层代码处理的错误信息。

代码示例:

package main

import (
    "errors"
    "fmt"
)

func main() {
    t, err := divide(2, 0)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(t)
    }
}

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("除数不能为 0")
    }
    return a / b, nil
}
  • 第 19 行:使用 errors.New 自定义一个除数不能为 0 的错误;
  • 第 10~12 行:若除数为零,则输出这个错误。

3. 异常处理

如果你调用的方法的开发者不够仔细,并没有将所有的异常都考虑到并作为错误返回,那你的程序可能就会被其影响而崩溃。对这种情况,GO 语言提供了一个叫recover()的函数,用于处理这种问题。一般常用于服务启动的入口函数,因为网络等外部因素,极有可能会导致程序异常,这些异常就需要这个函数来捕获。

代码示例:

package main

import (
    "fmt"
)

func main() {
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("程序运行中出现异常:", err)
        }
    }()
    t := divide(2, 0)
    fmt.Println(t)
}

func divide(a, b int) int {
    return a / b
}
  • 第 17 行:在没有判断除数的情况下直接做除法,若除数为零,程序直接崩溃。
  • 第 8~11 行:在 main 函数结束时,获取执行过程中的错误,若没有错误者 err 为 nil。

4. 小结

本位介绍了 Go 语言中如何使用 errors 包来自定义错误,如何去使用函数中返回出来的 error 类型变量,来处理自定义错误以及在无法避免的异常出现的时候如何使用recover()来保障程序不崩溃。

以上关于36. Go 语言中的错误和异常处理的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 36. Go 语言中的错误和异常处理

发表回复