История изменений
Исправление provaton, (текущая версия) :
Я не голангист ни разу, но попробую. Итак, плюсы возврата ошибок через return:
Глядя на тип возвращаемого значения функции можно сразу понять, возможна ли в ней ошибка, или не возможна. Если функция паникует, то это надо указывать отдельной строкой в документации. В джаве для этого есть отдельная хренотень в сигнатурах что-то типа throws SomeKindOfException (не джавист, точный синтаксис не знаю). В питонах-рубях эксепшены кидаются как попало, и это жутко бесит. пишешь код try: ... except А что в эксепт, какой блин класс писать? Ладно если разраб либы вменяем и укажет в доке, на большая часть разрабов не таковы.
Следствие из вышеуказанного: если ты не обработаешь возвращаемую ошибку, то компилятор тебе выдаст об этом ворнинг. Полезно. Насчет обработки паники компилятор не помощник.
Возвращаемая ошибка может быть не только строкой, но содержать в себе структурированную информацию для правильной обработки этой ошибки. В панике же только строка, которую ты разве что можешь юзеру в лицо бросить. В языках с эксепшн-ориентированной обработкой ошибок в эксепшнах есть структурированная инфа.
Мне лично очень не нравятся ошибки в го, так как они завязаны на то, что главное возвращаемое значение в случае ошибки nil. nil'ов в языках 21-го века быть не должно.
Нормальная обработка возвращаемых ошибок в haskell'е и rust'е.
UPDATE: немного ошибся. Паниковать можно не только строкой, но interface {}. Это хоть и лучше, но все равно не дает использовать тайпчек в обработчике ошибок.
Исходная версия provaton, :
Я не голангист ни разу, но попробую. Итак, плюсы возврата ошибок через return:
Глядя на тип возвращаемого значения функции можно сразу понять, возможна ли в ней ошибка, или не возможна. Если функция паникует, то это надо указывать отдельной строкой в документации. В джаве для этого есть отдельная хренотень в сигнатурах что-то типа throws SomeKindOfException (не джавист, точный синтаксис не знаю). В питонах-рубях эксепшены кидаются как попало, и это жутко бесит. пишешь код try: ... except А что в эксепт, какой блин класс писать? Ладно если разраб либы вменяем и укажет в доке, на большая часть разрабов не таковы.
Следствие из вышеуказанного: если ты не обработаешь возвращаемую ошибку, то компилятор тебе выдаст об этом ворнинг. Полезно. Насчет обработки паники компилятор не помощник.
Возвращаемая ошибка может быть не только строкой, но содержать в себе структурированную информацию для правильной обработки этой ошибки. В панике же только строка, которую ты разве что можешь юзеру в лицо бросить. В языках с эксепшн-ориентированной обработкой ошибок в эксепшнах есть структурированная инфа.
Мне лично очень не нравятся ошибки в го, так как они завязаны на то, что главное возвращаемое значение в случае ошибки nil. nil'ов в языках 21-го века быть не должно.
Нормальная обработка возвращаемых ошибок в haskell'е и rust'е.