Go
语言函数(或方法)是支持多个返回值的,因此在Go
语言的编程哲学中,函数的返回值的最后一个通常都是error
类型:
//标准os包下的函数
func Open(name string) (*File, error) {
return OpenFile(name, O_RDONLY, 0)
}
把error
类型作为函数的最后一个返回值,其作用在于告诉调用者函数在执行过程是否发生错误,当返回的error
值为nil
,表示函数正常执行。
其实,error
类型本质上是一个Go
内置的接口,其定义如下:
type error interface {
Error() string
}
从上面error
的定义可以看到error
接口只有一个Error()
方法。
遵循着Go
语言的编程哲学,当我们开发自己的函数时最好也把error
作为函数的最后一个返回值。
即然要返回error
类型,那么就必须先创建error
类型,怎么创建呢?在这篇文章我们简单学习三种创建error
类型的方式。
使用errors包
Go
标准库errors
包为了我们提供了一个最简单的error
接口实现:
//errors包errors.go文件
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
从上面的定义可以看到errorString
实现了error
接口,且参数非常简单,只有一个文本信息,通过errors.New()
函数可以创建一个errorString
类型:
package school
import "errors"
type Student struct {
ID int
Name string
Score int
}
func NewStudent(id int, name string, score int) (*Student, error) {
if id