15-错误
错误处理
在 Go 中,错误一直是很常见的。错误用内建的 error
类型来表示。
示例
该程序试图打开一个并不存在的文件
package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err != nil { #判断是否是nil,不是nil就是错误 fmt.Println(err) #打印错误信息 return } fmt.Println(f.Name(), "opened successfully") }
如果成功打开文件,Open 函数会返回一个文件句柄(File Handler)和一个值为 nil 的错误。而如果打开文件时发生了错误,会返回一个不等于 nil 的错误。
按照 Go 的惯例,在处理错误时,通常都是将返回的错误与 nil 比较。nil 值表示了没有错误发生,而非 nil 值表示出现了错误
错误类型的表示
让我们进一步深入,理解 error
类型是如何定义的。error
是一个[接口]类型,定义如下:
type error interface {
Error() string
}
error
有了一个签名为 Error() string
的方法。所有实现该接口的类型都可以当作一个错误类型。Error()
方法给出了错误的描述。
fmt.Println
在打印错误时,会在内部调用 Error() string
方法来得到该错误的描述