所谓的异常:当GO检测到一个错误时,程序就无法继续执行了,反而出现了一些错误的提示,这就是所谓的**"异常"**。
所以为了保证程序的健壮性,要对异常的信息进行处理。
例如,如下程序,定义一个函数实现整除操作,这个程序对大家来说已经很简单了,实现如下:
package main
func Test(a, b int) int {
return a / b
}
func main() {
Test(10,0)
}
但是,大家仔细考虑一下,该方法是否有问题?
如果b的值为0,会出现什么情况?
程序会出现以下的异常信息:
image-20210605105405080
并且整个程序停止运行。
那么出现这种情况,应该怎样进行处理呢?这时就要用到异常处理方法的内容。
Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下:
type error interface {
Error() string
}
import "errors"
Go语言的标准库代码包errors为用户提供如下方法:
image-20210605105719344
通过以上代码,可以发现error接口的使用是非常简单的(error是一个接口,该接口只声明了一个方法Error(),返回值是string类型,用以描述错误)。
下面看一下基本使用,
import "errors"
err := errors.New("this is normal err")
fmt.Println("err =", err)
fmt
包中也封装了一个专门输出错误信息的方法,如下所示:err1 := fmt.Errorf("%s", "this is normal err1")
fmt.Println("err1 = ", err1)
package main
import (
"errors"
"fmt"
)
// 设置返回错误信息
func Test(a, b int) (result int, err error) {
err = nil
if b == 0 {
err = errors.New("不能为0") // 定义error
} else {
result = a / b
}
return
}
func main() {
result, err := Test(10, 0)
if err != nil {
fmt.Println("err =", err)
} else {
fmt.Println("result =", result)
}
}
执行如下:
err = 不能为0
在Test( )函数中,判断变量b的取值,如果有误,返回错误信息。
并且在main( )中接收返回的错误信息,并打印出来。
这种用法是非常常见的,例如,后面讲解到文件操作时,涉及到文件的打开,如下:
func Open(name string) (*File, error)
在打开文件时,如果文件不存在,或者文件在磁盘上存储的路径写错了,都会出现异常,这时可以使用error记录相应的错误信息。