e

golang自定义错误包, 可以记录调用位置的具体信息, 包括文件名, 行号, 方法名和错误消息
cutome error in golang

安装

go get github.com/gohouse/e

使用

生成一个错误

  • 标准生成
err := e.New("这是错误信息")
  • 附带接受原始错误的返回
err := e.NewWithError("这是错误信息", error.New("这是原生错误信息"))

获取错误信息

err.Error()

获取错误堆栈信息

// 获取堆栈对象
errorStack := err.Stack()
// 获取错误的文件
errorStack.File
// 获取错误的文件行号
errorStack.Line
// 获取错误的方法名
errorStack.FuncName

转换为原生error

var err2 error
err2 = err.ToError()
// 这里的err就是e.New(xxx), 即e.Error或e.E

这里只包含标准错误信息, 不包含stack信息

转换为原生error并附带stack信息

var err2 error
err2 = err.ToErrorWithStack()
// 这里的err就是e.New(xxx), 即e.Error或e.E
error.New("标准错误信息; 错误文件:错误行号:错误方法名")

完整示例

package main

import (
	"fmt"
	"github.com/gohouse/e"
)

func main() {
	var err e.E
	// 或者 var err e.Error
	err = testError()

	fmt.Println("error msg:", err.Error())
	fmt.Println("error stack:", err.Stack())
	fmt.Println("error file:", err.Stack().File)
	fmt.Println("error line:", err.Stack().Line)
	fmt.Println("error func name:", err.Stack().FuncName)

	fmt.Printf("%#v", err)
}

func testError() e.Error {
	return e.New("only show a custom errors demo")
}

输出

error msg: only show a custom errors demo
error stack: {21 main.testError /go/src/github.com/gohouse/demo/e.go}
error file: /Users/fizz/go/src/github.com/gohouse/demo/e_demo/e.go
error line: 21
error func name: main.testError

e.Error{Msg:"only show a custom errors demo", Stack:e.Stack{Line:21, FuncName:"main.main", File:"/go/src/github.com/demo/e.go"}}