同fmt.Stringer类似,error类型是一个内建接口:
type error interface { Error() string }
与fmt.Stringer类似,fmt包在打印值时也会满足error
通常函数会返回一个error值,调用它的代码应该判断这个错误是否等于nil来进行错误处理
error 为 nil 时表示成功,非 nil 表示失败
package main
import (
"fmt"
"time"
)
type MyError struct {
When time.Time
What string
}
//还是利用了Stringer接口
func (e *MyError) Error() string {
return fmt.Sprintf("at %v, %s", e.When, e.What)
}
//test 方法 用来返回一个MyError的结构体
func test() error {
return &MyError{
time.Now(),
"it did not work",
}
}
func main() {
if err := test(); err != nil {
fmt.Println(err)
}
//等价于
error2 := test()
if error2 != nil {
fmt.Println(error2)
}
}