Dump those rules for a much simpler insight:
When comparing interfaces, type and value must match to compare equal.
So, (nil, nil) compares NE to (*myFancyErrorType, nil) for the same reason that (float64, 0) and (uint16, 0) do.
It isn't all that complicated. I don't see a real and non-insane alternative to it. Do you?
Dump those rules for a much simpler insight:
When comparing interfaces, type and value must match to compare equal.
So, (nil, nil) compares NE to (*myFancyErrorType, nil) for the same reason that (float64, 0) and (uint16, 0) do.
It isn't all that complicated. I don't see a real and non-insane alternative to it. Do you?