From 2d980ace659d93557c376d9c080445cc8b95d87e Mon Sep 17 00:00:00 2001 From: james Date: Wed, 22 Mar 2017 11:08:01 +0800 Subject: [PATCH 1/2] add withMessage.Msg and errors.SecondCauseMsg func --- errors.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/errors.go b/errors.go index 842ee804..e9143694 100644 --- a/errors.go +++ b/errors.go @@ -227,6 +227,7 @@ type withMessage struct { func (w *withMessage) Error() string { return w.msg + ": " + w.cause.Error() } func (w *withMessage) Cause() error { return w.cause } +func (w *withMessage) Msg() string { return w.msg } func (w *withMessage) Format(s fmt.State, verb rune) { switch verb { @@ -267,3 +268,29 @@ func Cause(err error) error { } return err } + +// SecondCauseMsg get error second stack msg. +func SecondCauseMsg(err error) string { + type causer interface { + Cause() error + } + + second := err + for err != nil { + cause, ok := err.(causer) + if !ok { + break + } + second, err = err, cause.Cause() + } + // return second + + type msger interface { + Msg() string + } + msg, ok := second.(msger) + if !ok { + return second.Error() + } + return msg.Msg() +} From 633b6e9e1984e408ad4325b14dff9cc00c57b144 Mon Sep 17 00:00:00 2001 From: james Date: Wed, 22 Mar 2017 11:08:55 +0800 Subject: [PATCH 2/2] remove note --- errors.go | 1 - 1 file changed, 1 deletion(-) diff --git a/errors.go b/errors.go index e9143694..de6570de 100644 --- a/errors.go +++ b/errors.go @@ -283,7 +283,6 @@ func SecondCauseMsg(err error) string { } second, err = err, cause.Cause() } - // return second type msger interface { Msg() string