🚧 This library as under heavy development until release of version 1.x.x
🚧
Wrapper for Go errors that prints error causes with theis stack traces.
- Prints stacks traces from all of the causes
- Shortens file paths and function names for readability
- Supports and exports
errors.Is
,errors.As
,errors.Unwrap
Get the dependency with:
go get github.com/coditory/go-errors
and import it in the project:
import "github.com/coditory/go-errors"
The exported package is errors
, basic usage:
import "github.com/coditory/go-errors"
func main() {
err := foo()
fmt.Println("Error with stack trace:")
fmt.Println(errors.Format(err))
stderr := fmt.Errorf("std error")
fmt.Println("Go std error:")
fmt.Println(errors.Format(stderr))
}
func foo() error {
err := bar()
return errors.Wrap(err, "foo failed")
}
func bar() error {
return errors.New("bar failed")
}
Output:
Error with stack trace:
foo failed
./pkg/samples.go:34
main.foo
./pkg/samples.go:10
main.main
go1.20.2/rc/runtime/proc.go:250
runtime.main
go1.20.2/rc/runtime/asm_amd64.s:1598
runtime.goexit
caused by: bar failed
./pkg/samples.go:38
main.bar
./pkg/samples.go:33
main.foo
./pkg/samples.go:10
main.main
go1.20.2/rc/runtime/proc.go:250
runtime.main
go1.20.2/rc/runtime/asm_amd64.s:1598
runtime.goexit
Go std error:
std error
Errors can be formatted with different verbosity levels with:
fmt.Println(errors.Formatv(err), verbosity)
...or by changing the global verbosity level:
errors.Config.Verbosity = 5
The default verbosity level is 5.
Verbosity level samples generated with go run ./samples
:
>>> Format: 0
foo failed
>>> Format: 1
foo failed
caused by: bar failed
>>> Format: 2
foo failed
main.foo():19
main.main():10
runtime.main():250
runtime.goexit():1598
caused by: bar failed
main.bar():23
main.foo():18
main.main():10
runtime.main():250
runtime.goexit():1598
>>> Format: 3
foo failed
./samples.go:19
./samples.go:10
go1.20.2/rc/runtime/proc.go:250
go1.20.2/rc/runtime/asm_amd64.s:1598
caused by: bar failed
./samples.go:23
./samples.go:18
./samples.go:10
go1.20.2/rc/runtime/proc.go:250
go1.20.2/rc/runtime/asm_amd64.s:1598
>>> Format: 4
foo failed
./samples.go:19 foo()
./samples.go:10 main()
go1.20.2/rc/runtime/proc.go:250 main()
go1.20.2/rc/runtime/asm_amd64.s:1598 goexit()
caused by: bar failed
./samples.go:23 bar()
./samples.go:18 foo()
./samples.go:10 main()
go1.20.2/rc/runtime/proc.go:250 main()
go1.20.2/rc/runtime/asm_amd64.s:1598 goexit()
>>> Format: 5
foo failed
main.foo()
./samples.go:19
main.main()
./samples.go:10
runtime.main()
go1.20.2/rc/runtime/proc.go:250
runtime.goexit()
go1.20.2/rc/runtime/asm_amd64.s:1598
caused by: bar failed
main.bar()
./samples.go:23
main.foo()
./samples.go:18
main.main()
./samples.go:10
runtime.main()
go1.20.2/rc/runtime/proc.go:250
runtime.goexit()
go1.20.2/rc/runtime/asm_amd64.s:1598
>>> Format: 6
foo failed
./samples.go:19
foo()
./samples.go:10
main()
go1.20.2/rc/runtime/proc.go:250
main()
go1.20.2/rc/runtime/asm_amd64.s:1598
goexit()
caused by: bar failed
./samples.go:23
bar()
./samples.go:18
foo()
./samples.go:10
main()
go1.20.2/rc/runtime/proc.go:250
main()
go1.20.2/rc/runtime/asm_amd64.s:1598
goexit()
>>> Format: 7
foo failed
/Users/mendlik/Development/go/go-errors/samples/samples.go:19
main.foo()
/Users/mendlik/Development/go/go-errors/samples/samples.go:10
main.main()
/Users/mendlik/.sdkvm/sdk/go/1.20.2/src/runtime/proc.go:250
runtime.main()
/Users/mendlik/.sdkvm/sdk/go/1.20.2/src/runtime/asm_amd64.s:1598
runtime.goexit()
caused by: bar failed
/Users/mendlik/Development/go/go-errors/samples/samples.go:23
main.bar()
/Users/mendlik/Development/go/go-errors/samples/samples.go:18
main.foo()
/Users/mendlik/Development/go/go-errors/samples/samples.go:10
main.main()
/Users/mendlik/.sdkvm/sdk/go/1.20.2/src/runtime/proc.go:250
runtime.main()
/Users/mendlik/.sdkvm/sdk/go/1.20.2/src/runtime/asm_amd64.s:1598
runtime.goexit()