2.2 KiB
2.2 KiB
11.1 错误处理
Go语言设计的时候主要的特点是:简洁、明白,简洁是指语法和C类似,相当的简单,明白是指任何语句都是很明显的,不含有任何隐式的东西,Go在设计错误的时候也是一样。我们知道C语言里面返回错误是使用-1或者nil之类的返回信息表示错误,但是对于使用者来说这个返回值根本不知道什么意思,而Go里面当发生异常时返回一个Error类型,通过前面编写的代码,我们发现在Go语言里面有很多地方都使用了Error类型,很多函数都有这个Error返回。例如os.Open函数当打开文件失败时返回一个不为nil的error
func Open(name string) (file *File, err error)
下面这个例子通过os.Open打开一个文件,如果出错那么会执行log.Fatal打印出来错误信息:
f, err := os.Open("filename.ext")
if err != nil {
log.Fatal(err)
}
其实这样的error返回在Go语言的很多内置包里面有很多,我们这个小节将详细的介绍这些error是怎么设计的,以及在我们设计的Web应用如何更好的处理error。
Error类型
error类型是一个接口类型,这是它的定义:
type error interface {
Error() string
}
error是一个内置的类型变量,我们可以在/builtin/包下面找到相应的定义。而我们在很多内部包里面用到的 error是errors包下面的实现的非导出结构errorString
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
你可以通过errors.New把一个字符串转化为errorString,然后返回error接口,其内部实现如下:
// New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
}
下面这个例子演示了如何使用errors.New:
func Sqrt(f float64) (float64, error) {
if f < 0 {
return 0, errors.New("math: square root of negative number")
}
// implementation
}
自定义Error
Error检测
总结
links
- 目录
- 上一节: 错误处理,调试和测试
- 下一节: 使用GDB调试