aboutsummaryrefslogtreecommitdiff
path: root/src/errors
diff options
context:
space:
mode:
authorMatt T. Proud <matt.proud@gmail.com>2021-10-19 10:09:06 +0200
committerDamien Neil <dneil@google.com>2021-10-19 18:42:57 +0000
commit7999fd4710e7f987e86d7b32dd9af31ced4810ba (patch)
tree6788142cc71e7dab110b1a307e8ffec3b9581bdb /src/errors
parent6c3cd5d2eb7149c9c1ced7d70c3f4157f27c1588 (diff)
downloadgo-7999fd4710e7f987e86d7b32dd9af31ced4810ba.tar.xz
errors: mention Is methods should not call Unwrap
errors.Is internally unwraps the error until the error matches the target. Because of this, a user-authored Is method on an error type need not call errors.Unwrap on itself or the target, because that would make the unwrapping operation O(N^2). It is a subtle detail to remind authors for resource efficiency reasons. Change-Id: Ic1ba59a5bdbfe2c7cb51a2cba2537ab6de4a13ff Reviewed-on: https://go-review.googlesource.com/c/go/+/356789 Reviewed-by: Jean de Klerk <deklerk@google.com> Reviewed-by: Damien Neil <dneil@google.com> Trust: Jean de Klerk <deklerk@google.com> Trust: Damien Neil <dneil@google.com> Run-TryBot: Jean de Klerk <deklerk@google.com> TryBot-Result: Go Bot <gobot@golang.org>
Diffstat (limited to 'src/errors')
-rw-r--r--src/errors/wrap.go3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/errors/wrap.go b/src/errors/wrap.go
index 4eb4f9ae37..b73d5a8ce2 100644
--- a/src/errors/wrap.go
+++ b/src/errors/wrap.go
@@ -35,7 +35,8 @@ func Unwrap(err error) error {
// func (m MyError) Is(target error) bool { return target == fs.ErrExist }
//
// then Is(MyError{}, fs.ErrExist) returns true. See syscall.Errno.Is for
-// an example in the standard library.
+// an example in the standard library. An Is method should only shallowly
+// compare err and the target and not call Unwrap on either.
func Is(err, target error) bool {
if target == nil {
return err == target