To be clear: The recommendation is *not* to compare strings. The
recommendation is to compare errors by identity and not consider errors
created by different packages to be equal.

If you desperately need your error to be considered "the same" as another,
the most correct way would be to implement `Is(other error) bool`, e.g.

type notQuiteEOF struct {}
func (notQuiteEOF) Error() string {
    return "not quite EOF, but almost"
}
func (notQuiteEOF) Is(other error) bool {
    return other == io.EOF
}

This allows errors to be considered "the same" under `errors.Is`, while not
actually being the same and it's probably the recommended mechanism to
"imitate" an error from a different package.

On Sat, Nov 5, 2022 at 6:00 PM Nikhilesh Susarla <nikhilesh1...@gmail.com>
wrote:

> The error is coming from other package. So, then have to compare strings.
> I guess
>
> On Sat, 5 Nov 2022 at 22:28, Sean Foley <seancfo...@gmail.com> wrote:
>
>> If the error is created by your code, then just reuse the same one.
>>
>> See
>> https://cs.opensource.google/go/go/+/refs/tags/go1.19.3:src/io/io.go;drc=90b40c0496440fbd57538eb4ba303164ed923d93;l=44
>>
>> If the error is created by code other than your own, and that code does
>> not reuse the same error, then compare strings.
>>
>>
>> On Sat, Nov 5, 2022 at 12:39 PM Nikhilesh Susarla <
>> nikhilesh1...@gmail.com> wrote:
>>
>>> Oh I see.
>>> What is the best way to compare errors?
>>> Here in the above example I can do e.Error() == ErrNotFound.Error() //
>>> which returns true
>>> Is there any other way rather than string comparison ?
>>>
>>> Thank you
>>>
>>> On Sat, Nov 5, 2022 at 10:03 PM Axel Wagner <
>>> axel.wagner...@googlemail.com> wrote:
>>>
>>>> Oh and this behavior is documented, of course:
>>>> https://pkg.go.dev/errors#New
>>>>
>>>> On Sat, Nov 5, 2022 at 5:32 PM Axel Wagner <
>>>> axel.wagner...@googlemail.com> wrote:
>>>>
>>>>> Every invocation of `errors.New` returns a new unique error value,
>>>>> even if the same error text is used.
>>>>> That is intentional. It would be confusing, if package A chose the
>>>>> same error sentinel text as package B and suddenly their sentinels compare
>>>>> as equal.
>>>>> If you want error identity between values, you have to actually copy
>>>>> the error value (or implement your own, which may very well not do it this
>>>>> way).
>>>>>
>>>>> On Sat, Nov 5, 2022 at 5:29 PM Nikhilesh Susarla <
>>>>> nikhilesh1...@gmail.com> wrote:
>>>>>
>>>>>>
>>>>>> Same interface comparison
>>>>>>
>>>>>> https://play.golang.com/p/9hHlTDosYzz
>>>>>>
>>>>>> Why is the equals too still returning false?
>>>>>>
>>>>>> Any more details on this?
>>>>>>
>>>>>> Thank you
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "golang-nuts" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to golang-nuts+unsubscr...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/golang-nuts/ee3d53d3-d3c8-4a3b-801a-af6060316e3an%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/golang-nuts/ee3d53d3-d3c8-4a3b-801a-af6060316e3an%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CAMt-viXeFOgh42DtvD4cJiEvhUDR-PaD8GvOEDfuytLdeKE4GQ%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/golang-nuts/CAMt-viXeFOgh42DtvD4cJiEvhUDR-PaD8GvOEDfuytLdeKE4GQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGwe72T-RO8-dam2aizuGL5S4va%3Dzob8inFTegijUvjFA%40mail.gmail.com.

Reply via email to