#машины_разное Итак, благодаря Олегу Ковалову мы знаем, что | Человек и машина
#машины_разное
Итак, благодаря Олегу Ковалову мы знаем, что NaN не равен NaN. А как насчет nil != nil?
Я еще осваиваюсь в мире сусликового программирования и частенько захожу в чужие Pull Request’ы учиться уму разуму. Однажды мое внимание привлек следующий кусок кода:
if err == nil {
return err
}
В комментариях затребовали незамедлительно заменить return err на return nil, указав, что так в Go делать ни в коем случае нельзя, и что “где-то выше” такой nil не будет интерпретирован как nil!
Я прихожу из змеиного мирка, где NoneType всегда NoneType, так что я пошел за советом к коллегам. Оказалось, что: 1) есть типизированный и нетипизированный nil (што); 2) nil-значения интерфейсов содержат не только само значение (nil), но и конкретный тип (*CustomError, например) (ШТО)!
Ну а error как раз Interface, так что вариантов прострелить себе руки, ноги, затылок и спину масса.
Такие дела. Прочитать подробнее можно тут:
- https://dave.cheney.net/2017/08/09/typed-nils-in-go-2
- https://golang.org/doc/faq#nil_error
Отдельное спасибо @sergdudk за разъяснение.