1.8 KiB
1.8 KiB
adverr
Package adverr implements errors with call stack traces as well as error templates for error equality
Installation
go get git.tordarus.net/tordarus/adverr
Usage examples
Importing
import "git.tordarus.net/tordarus/adverr"
Creating error templates
var (
ErrDoStuffFailed = adverr.NewErrTmpl("ErrDoStuffFailed", "Could'nt do stuff because of %s")
)
Creating independent error (without error template)
func doStuffWithIndependentErr() error {
return adverr.New("Could'nt do stuff")
}
Creating error based on template
func doStuff() error {
return ErrDoStuffFailed.New("reasons")
}
Printing errors on stderr convieniently
adverr.Print(myErr)
adverr.Println(myErr)
Printing errors on stderr and exit with exit code
adverr.Fatal(myErr, 1)
adverr.Fatalln(myErr, 1)
Advantages of error templates
two errors made by the same template will return true when called with errors.Is()
func doStuffAndFailWithMsg(msg string) error {
return ErrDoStuffFailed.New(msg)
}
err1 := doStuffAndFailWithMsg("err1")
err2 := doStuffAndFailWithMsg("err2")
fmt.Println(errors.Is(err1, err2)) // true
fmt.Println(err1 == err2) // false
fmt.Println(err1.Error() == err2.Error()) // false
Wrapping errors
By wrapping errors, you can provide an error that is caused by another error.
A 'Caused by' section will be printed in the stack trace showing the original error.
You can also retrieve the original error by using errors.Unwrap()
func doStuffWrapped() error {
err := doStuff()
if err != nil {
return adverr.Wrap("doStuffWrapped failed", err)
}
return nil
}
Retrieving call stack trace (for debugging purposes)
fmt.Println(adverr.Trace())