error
errors.New()
,和errors.Error()
用来传递和获取错误信息.明显官方的包已经不能知足了, 只能采起其余方法补救, 如:git
经过简单调用, 便可以查看咱们须要的信息, 最好是一键调用搞定.
为了照顾使用习惯, 咱们就采用跟官方一致的用法, 来完成.
该包已经完成, github地址为 https://github.com/gohouse/egithub
err := e.New("这里有错误")
跟官方的方法名保持一致, 只不过放在了本身的
package e
包下边
err.Error()
这个跟官方保持一致, 返回的也仅仅是string
err.Stack()
这里的stack是一个结构体, 包含了错误的文件名,行号和具体方法名golang
type ErrorStack struct { File string Line int FuncName string }
所以, 咱们要拿到对应的信息, 就只须要简单调用便可bash
// 获取堆栈对象 errorStack := err.Stack() // 获取错误的文件 errorStack.File // 获取错误的文件行号 errorStack.Line // 获取错误的方法名 errorStack.FuncName
error
err.ToError()
这里则把错误信息交还给官方标准error
, 只包含标准的错误信息学习
若是想携带stack信息, 则能够使用code
err.ToErrorWithStack()
返回格式为orm
error.New("标准错误信息; 错误文件:错误行号:错误方法名")
package main import ( "fmt" "github.com/gohouse/e" ) func main() { var err e.E // 或者 var err e.Error err = testError() fmt.Println("错误信息:", err.Error()) fmt.Println("错误堆栈信息:", err.Stack()) fmt.Println("错误的文件名为:", err.Stack().File) fmt.Println("错误行号:", err.Stack().Line) fmt.Println("错误方法名:", err.Stack().FuncName) fmt.Printf("%#v", err) } func testError() e.Error { return e.New("only show a custom errors demo") }
输出结果对象
错误信息: only show a custom errors demo 错误堆栈信息: {23 main.testError /go/src/github.com/gohouse/demo/e.go} 错误的文件名为: /go/src/github.com/gohouse/demo/e.go 错误行号: 23 错误方法名: main.testError e.Error{Msg:"only show a custom errors demo", Stack:e.Stack{Line:23, FuncName:"main.main", File:"/go/src/github.com/demo/e.go"}}
请查看官方仓库, 地址为: https://github.com/gohouse/e
或者加入QQ群: 470809220
<img border="0" src="http://pub.idqqimg.com/wpa/im...; alt="gorose-orm" title="gorose-orm">
交流学习get