同fmt.Stringer类似,error类型是一个内建接口:

    type error interface { Error() string }

    与fmt.Stringer类似,fmt包在打印值时也会满足error
    通常函数会返回一个error值,调用它的代码应该判断这个错误是否等于nil来进行错误处理
    error 为 nil 时表示成功,非 nil 表示失败

    1. package main
    2. import (
    3. "fmt"
    4. "time"
    5. )
    6. type MyError struct {
    7. When time.Time
    8. What string
    9. }
    10. //还是利用了Stringer接口
    11. func (e *MyError) Error() string {
    12. return fmt.Sprintf("at %v, %s", e.When, e.What)
    13. }
    14. //test 方法 用来返回一个MyError的结构体
    15. func test() error {
    16. return &MyError{
    17. time.Now(),
    18. "it did not work",
    19. }
    20. }
    21. func main() {
    22. if err := test(); err != nil {
    23. fmt.Println(err)
    24. }
    25. //等价于
    26. error2 := test()
    27. if error2 != nil {
    28. fmt.Println(error2)
    29. }
    30. }