The reason you are getting false while trying to find one error within another via errors.Is is because - while the two errors may have the same field values - they are two different memory pointers:
e := &somePointerWrapperError{"Hi!", nil} ew := fmt.Errorf("whoa!: %w", e) e2 := &somePointerWrapperError{"Hi!", nil} // e2 != e ew := fmt.Errorf("whoa!: %w", e) errors.Is(ew, e) // true errors.Is(ew, e2) // false - because `ew` wraps `e` not `e2` errors.Is(ew, e) // true So how to detect this "type" of error and get its value: use errors.As instead:
e := &somePointerWrapperError{"Hi!", nil} e2 := fmt.Errorf("whoa!: %w", e) var ev *somePointerWrapperError if errors.As(e2, &ev) { fmt.Printf("%#v\n", ev) // &somePointerWrapperError{Msg:"Hi!", Err:error(nil)} }