For replacement offical package of errors
for more detials, see the example
package main
import (
"fmt"
"github.com/gogap/errors"
)
var (
ErrParseTest = errors.TN("GOGAP", 10001, "hello {{.param1}}")
ErrParseTest2 = errors.TN("GOGAP", 10002, "test error")
ErrStackTest = errors.TN("GOGAP", 10003, "call stack test")
)
func main() {
e1 := ErrParseTest.New(errors.Params{"param1": "world"}).WithContext("key", "value")
e1.Append("I am append errors")
fmt.Println("always equal while errors append:", ErrParseTest.IsEqual(e1))
fmt.Println("ErrParseTest = ErrParseTest2 :", ErrParseTest2.IsEqual(e1))
data, _ := e1.(errors.ErrCode).Marshal()
fmt.Println(string(data))
fmt.Println(e1.Error())
stack3Error := call_3()
fmt.Println(stack3Error.(errors.ErrCode).StackTrace())
fmt.Println(e1.(errors.ErrCode).FullError())
}
func call_1() error {
return call_2()
}
func call_2() error {
return call_3()
}
func call_3() error {
return ErrStackTest.New()
}
$ go run main.go
always equal while errors append: true
ErrParseTest = ErrParseTest2 : false
{"id":"6F93654","namespace":"GOGAP","code":10001,"message":"hello world; I am append errors."}
hello world; I am append errors.
github.com/gogap/errors/example/main.go:45 call_3
github.com/gogap/errors/example/main.go:31 main
/usr/local/go/src/runtime/proc.go:188 main
/usr/local/go/src/runtime/asm_amd64.s:1998 goexit
Id: GOGAP#10001:6F93654
Error:
hello world; I am append errors.
Context:
{"key":"value"}
StackTrace:
github.com/gogap/errors/example/main.go:17 main
/usr/local/go/src/runtime/proc.go:188 main
/usr/local/go/src/runtime/asm_amd64.s:1998 goexit