This question already has an answer here:
Context: I am doing unit tests and was trying to check if I got expected errors.
I didn't have the expected result so I tried something simple which is comparing to exact errors and I was surprise that the comparison returned "false"
e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false
Run Example: https://play.golang.org/p/cvjjiJT_5T
Can someone explain me why this returns false and how to properly check equality between errors ?
</div>
You're creating two different error variables with the same error message. When you compare them with ==
, you get false
because they're not the same variables.
If you want to compare the error messages, try e1.Error() == e2.Error()
. However, comparing error messages still isn't a good idea. You might consider creating some error constants (e.g. e1 == ErrContentNotFound
) or adding some ID to your errors and compare that (e.g. e1.ID == ContentNotFoundID
). Check https://dave.cheney.net/2016/04/07/constant-errors (and the related posts in that link) for more details.