Комментарии 14
Выкат C++ исключений и деструкторов вручную. Большой прогресс по сравнению с чистым Си, но всё же плюсовики будут кривиться.
0
Оставлю сразу ссылку на FAQ Why does Go not have exceptions?.
+2
Отложенное освобождение ресурсов хорошее. panic и recover как-то удивительно сделали, я не совсем понимаю преимущества относительно работающей во многих языках идиомы try / catch.
0
Роб Пайк недолюбливает эту идиому как раз из-за того, что наличие управляющей структуры try/catch/finally приводит к злоупотреблению исключениями и смешению с ошибками.
Поэтому чтобы уменьшить это злоупотребление повышена гранулярность: с блока до функции.
Поэтому чтобы уменьшить это злоупотребление повышена гранулярность: с блока до функции.
+3
Есть много споров на тему, нужно ли обязывать пользователя контролировать исключения try-catch блоком, или же делать это по усмотрению. Преимущество первых даже не в том, что обязует пользователя сразу писать безопасный код, а в том, что пользователь видит сразу все типы исключений, выбрасываемых всей цепочкой функций.
Не знаю как для Пайка, но для меня try-catch-finally блок имеет гораздо более понятную и логичную структуру, чем defer: код, который идет ниже, выполняется всегда позже; тогда как выполнение defer скачет. Вообще в Go создает впечатление некоего компилируемого скриптового языка, нежели современногоязыка программирования.
Не знаю как для Пайка, но для меня try-catch-finally блок имеет гораздо более понятную и логичную структуру, чем defer: код, который идет ниже, выполняется всегда позже; тогда как выполнение defer скачет. Вообще в Go создает впечатление некоего компилируемого скриптового языка, нежели современногоязыка программирования.
0
Интерестный подход.
Вопрос: в Go есть RAII? Т.е. defer сделан в дополнение к нему (как scope в D) или он компенсирует его отсутствие?
Вопрос: в Go есть RAII? Т.е. defer сделан в дополнение к нему (как scope в D) или он компенсирует его отсутствие?
0
И да, мне одному кажется что «гопроцедура» неудачный термин для русского языка? Я постоянно читаю это слово не правильно.
+3
Лучше поменять на «go-рутина». Так будет ближе к оригиналу, и понятнее.
0
НЛО прилетело и опубликовало эту надпись здесь
У меня друг так говорит. Но это как-то не по-русски. Есть, кстати, очень похожий русский термин — волокно (поток, переключаемый приложением, у волокон в одном потоке общий TLS). Так что можно называть их go-волокнами.
0
Мне показалось или в примере после пункта 3 ошибка и функция должна возвращать I вместо 1? Иначе я вообще не понимаю что там происходит…
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Обработка ошибок в Go: Defer, Panic и Recover