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) } }

浙公网安备 33010602011771号