go语言开发基础37 - 之go语言里自定义详细错误信息

在使用go语言开始时主动抛出错误时可以用errors包和fmt包来生成简单错误信息,实例如下:

package main

import (
    "fmt"
    "errors"
)

func main() {
    // 使用errors.New()方法生成错误提示
    fmt.Println(errors.New("new error info..."))

    // 使用fmt.Errorf()方法支持格式化生成错误提示
    err := fmt.Errorf("%s is failed...", "自定义错误")
    fmt.Println(err)
}

 

如果想要生成更详细的错误提示可以自定义错误提示类型,具体看下面的例子。

通过官网我们发现error类型是个接口:

 

 只需要实现了Error()方法我们就实现了error方法了,具体看下面的实例:

package main

import (
    "fmt"
    "os"
    "time"
)

// 定义结构体(错误信息使用)
type PathError struct {
    path       string
    op         string
    createTime string
    message    string
}

// 给结构体实现Error()方法
func (p *PathError) Error() string {
    return fmt.Sprintf("path=%s op=%s createTime=%s message=%s", p.path,
        p.op, p.createTime, p.message)
}

// 读取文件的代码
func Open(filename string) error {

    file, err := os.Open(filename)
    // 如果错误信息不为空,就返回定义的结构体类型的错误
    if err != nil {
        return &PathError{
            path:       filename,
            op:         "read",
            message:    err.Error(),
            createTime: fmt.Sprintf("%v", time.Now()),
        }
    }

    defer file.Close()
    return nil
}

func main() {
    // 调用open函数
    err := Open("C:/sdklflakfljdsafjs.txt")

    // 判断错误类型
    switch v := err.(type) {
    case *PathError:
        fmt.Println("get path error:", v)
    default:
        fmt.Println("default error:", v)
    }

}

 

posted @ 2020-07-31 17:58  欧-阳  阅读(165)  评论(0)    收藏  举报