Skip to content

Instantly share code, notes, and snippets.

@baijum
Last active July 5, 2019 09:15
Show Gist options
  • Select an option

  • Save baijum/62efd169991822de5b3d3a04a86e3682 to your computer and use it in GitHub Desktop.

Select an option

Save baijum/62efd169991822de5b3d3a04a86e3682 to your computer and use it in GitHub Desktop.
package main
import (
"fmt"
"github.com/pkg/errors"
)
func inner() error {
cause := errors.New("Error")
return errors.Wrapf(cause, "Inner")
}
func first() error {
cause := inner()
return errors.Wrapf(cause, "First")
}
func main() {
err := first()
if err != nil {
fmt.Printf("%+v\n", err)
err = errors.Cause(err)
fmt.Printf("%+v\n", err)
err = errors.Cause(err)
fmt.Printf("%+v\n", err)
}
}
/* Output:
Error
main.inner
/home/baiju/error2.go:10
main.first
/home/baiju/error2.go:15
main.main
/home/baiju/error2.go:19
runtime.main
/home/baiju/go1.13beta1/src/runtime/proc.go:203
runtime.goexit
/home/baiju/go1.13beta1/src/runtime/asm_amd64.s:1357
Inner
main.inner
/home/baiju/error2.go:11
main.first
/home/baiju/error2.go:15
main.main
/home/baiju/error2.go:19
runtime.main
/home/baiju/go1.13beta1/src/runtime/proc.go:203
runtime.goexit
/home/baiju/go1.13beta1/src/runtime/asm_amd64.s:1357
First
main.first
/home/baiju/error2.go:16
main.main
/home/baiju/error2.go:19
runtime.main
/home/baiju/go1.13beta1/src/runtime/proc.go:203
runtime.goexit
/home/baiju/go1.13beta1/src/runtime/asm_amd64.s:1357
Error
main.inner
/home/baiju/error2.go:10
main.first
/home/baiju/error2.go:15
main.main
/home/baiju/error2.go:19
runtime.main
/home/baiju/go1.13beta1/src/runtime/proc.go:203
runtime.goexit
/home/baiju/go1.13beta1/src/runtime/asm_amd64.s:1357
Error
main.inner
/home/baiju/error2.go:10
main.first
/home/baiju/error2.go:15
main.main
/home/baiju/error2.go:19
runtime.main
/home/baiju/go1.13beta1/src/runtime/proc.go:203
runtime.goexit
/home/baiju/go1.13beta1/src/runtime/asm_amd64.s:1357
*/
package main
import (
"errors"
"fmt"
)
func inner() error {
return fmt.Errorf("Inner %w", errors.New("Error"))
}
func first() error {
return fmt.Errorf("First %w", inner())
}
func main() {
err := first()
if err != nil {
fmt.Printf("%+v\n", err)
err = errors.Unwrap(err)
fmt.Printf("%+v\n", err)
err = errors.Unwrap(err)
fmt.Printf("%+v\n", err)
err = errors.Unwrap(err)
fmt.Printf("%+v\n", err)
err = errors.Unwrap(err)
fmt.Printf("%+v\n", err)
}
}
/* Output:
First Inner Error
Inner Error
Error
<nil>
<nil>
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment