package foo // go2 errors type wrapper interface { Unwrap() error } // pkg/errors type causer interface { Cause() error } func unwrap(err error) error { switch e := err.(type) { case wrapper: return e.Unwrap() case causer: return e.Cause() } return err }