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