Go源码学习之erros
go语言的设计非常简单优雅,这点我们从它的erros模块就可以窥探一二。
error的定义路径在src/builtin/builtin.go中
type error interface {
Error() string
}
就是一个接口,包含一个Error方法,我们再看下erros模块的实现
下面是src/errors/errors.go代码:
package errors
// New returns an error that formats as the given text.
func New(text string) error {
return &errorString{text}
}
// errorString is a trivial implementation of error.
type errorString struct {
s string
}
func (e *errorString) Error() string {
return e.s
}
可以看到非常简单,首先是一个初始化函数New接收string类型,返回的事一个
errorString类型的结构体。
还有一个errorString类型的Error方法,返回的是错误信息。
是不是很简单,调用也相当简单,只要
import "error"
error.New(${errorMessage})
就可以了
这里它是能接收string类型的错误信息,如果我们想返回我们自己的错误类型呢,很简单,只要我们重写Error方法就好了, 实例:
package main
import (
"fmt"
"time"
)
// MyError is an error implementation that includes a time and message.
type MyError struct {
When time.Time
What string
}
func (e MyError) Error() string {
return fmt.Sprintf("%v: %v", e.When, e.What)
}
func main() {
return MyError{
time.Date(1989, 3, 15, 22, 30, 0, 0, time.UTC),
"the file system has gone away",
}
}