状況: ユニットテストをしていて、予想されるエラーがあるかどうかをチェックしようとしていました。ゴランのエラーを比較するには
I期待どおりの結果を持っていなかったので、私はエラーを強要するために比較される単純な何かを試してみましたが、私は比較は「偽」を返していることに驚きました
e1 := errors.New("error")
e2 := errors.New("error")
fmt.Println(e1 == e2) // false
実行例:https://play.golang.org/p/cvjjiJT_5T
誰かが私に説明することができますなぜこれが偽を返すとエラー間の平等を正しくチェックする方法?
errors.Newは値へのポインタを返します。 e1/e2は異なる値へのポインタです。等価性テストは、内側の値ではなくポインタのアドレスをチェックするため、必然的にfalseです。これは%#v形式のhttps://play.golang.org/p/Vu5kaBhh6yを使って見ることができます。強く型付けされたエラーを使用し、代わりにアサーションを入力してください。 –