Go语言函数错误处理

Go语言函数错误处理教程

很多的编程语言,对 函数 出现错误的情况,或者发生意想不到的情况都会有对应的处理方式,最常用的就是通过异常的方式来处理。

但是,在 Go 语言 中,没有类似的异常处理机制,我们知道 Go 语言的函数可以 返回多个值,因此,在 golang 中,一般处理函数异常的方式,是通过返回值返回错误的形式。

Go语言函数错误处理

语法

func funcName(param paramType)(returnVal1 returnType, err error){ // do something }

说明

我们定义了一个函数 funcName,该函数传递一个 参数,该函数的返回值有两个,第一个是 returnType 类型,第二个是 error 类型。

如果我们的函数错误,那么就可以给 err 赋值,返回错误信息,否则就将 err 设置为 nil 返回即可。最后,我们在调用函数时,判断 err 是否为空即可。

Go语言函数错误处理使用

我们列举几个系统中,使用异常处理的函数,比如 golang 中,打开文件的函数,如下:

func Open(name string) (*File, error) { }

我们看到,这个函数接受一个 string 类型 的参数,返回一个 File 类型的返回值和一个 error 类型的返回值。如果文件打开出错,那么就会给 error 设置对应的错误信息。再比如,golang 中的网络连接的函数,如下:

func Dial(network, address string) (Conn, error){ }

该函数,同样返回了两个值,第一个值是 Conn 类型,第二个同样是 error 类型的,如果网络连接出错,那么就会给 error 设置对应的错误信息。

案例

Go语言函数错误处理

函数返回错误信息

package main import ( "errors" "fmt" ) // 定义除数为0的错误 var errDiv = errors.New("division by zero") func div(dividend, divisor int) (int, error) { // 判断除数为0的情况并返回 if divisor == 0 { return 0, errDiv } // 正常计算,返回空错误 return dividend / divisor, nil } func main() { fmt.Println("嗨客网(www.haicoder.net)") // 函数返回错误信息 if ret, err := div(2, 0); err != nil{ fmt.Println("Div err, Err =", err) }else{ fmt.Println("Div ok, Ret =", ret) } }

程序运行后,控制台输出如下:

32_golang函数错误处理.png

首先,我们通过 errors.New 定义了一个除数为 0 的错误。接着,我们在 div 函数中在做真正的计算之前,首先使用 if 语句 判断,如果除数为 0,那么就返回 0 和 定义的错误,否则,就返回正常的商,错误返回 nil。

main() 函数,调用我们自定义的函数 div 时,我们使用两个变量接受返回值,一个是商一个是错误信息,如果错误信息不是 nil,那么就表明处理出错,忽略返回值的处理,否则,就表明函数返回正常。

Go语言函数错误处理总结

在 golang 中,一般处理函数异常的方式,是通过返回值返回错误的形式。