LINUX.ORG.RU

golang - не хочу возвращать err, хочу паниковать!

 , , обработка ошибок


0

3

Какая-то секта с этими err. Код распухает в несколько раз. Идея с defer выглядит довольно здравой - я в своё время делал такой defer для 1C и для Delphi. Но паника лучше, чем возврат err-ов. Таковой возврат ничего не упрощает. Когда выпадает исключение, сразу виден весь стек. Сгенерированный err не показывает места своего возникновения, т.е. с помощью брекпойнтов нужно много итераций, чтобы локализовать ошибку. А на fatalpanic есть чуть ли не встроенный брекпойнт, во всяком случае, у меня на fatalpanic отладка сама по себе останавливается.

Кроме того, разбор err после каждого вызова офигенно многословен, код распухает буквально в разы.

Я собираюсь попробовать в своих упражнениях максимально использовать панику. Труъ голангисты, разубедите!

★★★★★

Ответ на: комментарий от den73

Только defer довольно дорогая и неочевидная (в плане потоков выполнения) штука, чтобы использовать это как общее решение.

feofan ★★★★★
()
Ответ на: комментарий от den73

Точнее, не так. Из 4, 4.0 единичной точности и 4.0 двойной точности. Чтобы ты не смог воспользоваться va_arg (ЕМНИП).

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

Только defer довольно дорогая

Я статью приводил с замерами, где показано, что обработка исключений паникой не медленнее, чем через err. Жаль, что она похоронена где-то в этих 10 страницах, а то бы я добавил её в свою вики. Как найти-то теперь?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Как найти-то теперь?

Поставь в настройках размер страницы 1000 сообщений и найди поиском броузера по странице

provaton ★★★★★
()
Ответ на: комментарий от provaton

Напиши пример списка из 4, «123» и какой-нибудь структуры на Си.

а ты напиши зачем нужен такой список и что ты с ним будешь делать дальше.

Вот да. А так-то это просто с боксингом, который по факту и в случае гошных интерфейсов есть.

feofan ★★★★★
()
Ответ на: комментарий от feofan

Оставь сову в покое. Объясни, почему-то для программистов на языках (процедурный)SQL, Delphi, C++, Питоне, JS, 1С, Visual Basic, наконец, блоки try..except и try..finally понятны, а для голангеров они недостаточно очевидны. Это что, такая школа для альтернативно одарённых?

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

Это будет история в интерпретаторе, например. А для чего нужен полиморфизм в параметрах - для printf.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Не валяй дурака. Я тебе выше привел аргументы (документация, статический тайпчек обработки ошибок), ты их поигнорил.

provaton ★★★★★
()
Ответ на: комментарий от feofan

Так он в го есть, а в Си его нет. Там есть только va_arg ущербный, а боксинг нужно городить каждый раз свой, соответственно будет зоопарк. В голанге его не только стандартизировали, но и назвали достаточно корявым именем, чтобы отбить соблазн всюду его пихать.

den73 ★★★★★
() автор топика
Ответ на: комментарий от provaton

Про статический тайпчек я тебе ответил, что всегда есть цена вопроса. Я, конечно, тоже хочу такой. Насчёт документации ты ответил что-то из серии «а вот сферический конь в вакууме хорошо скачет и совсем не пахнет навозом».

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

ты это по коду из середины стека скажи что тут будет происходить.

Не понял вопрос.

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

Для истории интерпретатора в голанге есть просто []interface{}. А в Си для этого нет ничего. Я просто сразу готовый результат сообщаю, чтобы время не тратить. Извините, я пойду попрограммирую, можно?

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

но и назвали достаточно корявым именем, чтобы отбить соблазн всюду его пихать.

но ты настойчив и твой соблазн так просто не отбить, я понял.

feofan ★★★★★
()
Ответ на: комментарий от den73

А для чего нужен полиморфизм в параметрах - для printf.

Для параметров printf нужен отдельный интерфейс как растовские трейты Debug и Display.

Удобно, конечно, сравнивать golang с языком, который появился на 50 лет раньше.

provaton ★★★★★
()
Ответ на: комментарий от den73

Там некорректное сравнение. При нормальной обработке ошибок он конструирует ошибку каждый раз заново, а при панике использует заранее объявленное значение. Это так, сходу.

feofan ★★★★★
()
Ответ на: комментарий от feofan

Там некорректное сравнение.

Возможно, я сам не смотрел. Я в любом случае буду использовать панику для обработки ошибок в своём коде. Потому что труд программиста дороже труда железки, и всё равно даже с паникой голанг будет быстрее питона и PHP. Наверное, неделю придумывал, как обрабатывать, теперь придумал и меня всё устраивает. Использую и код ошибки, и панику, но по-другому, чем в букварях предлагается.

den73 ★★★★★
() автор топика
Ответ на: комментарий от provaton

Старый конь борозды не портит. Ещё один вариант, когда нужен тип «всё» - чтение результатов SQL запроса. Прямо сейчас сижу и пользуюсь, пользуюсь и радуюсь.

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

Зачем ты ищешь альтернативы interface? В printf в голанге уже используются interface{}..., которое есть определённый подвид va_args, пусть менее эффективный, зато менее кривой. Для конкурентоспособности сегодня достаточно перегнать по скорости не С++ и Rust, а Питон, PHP и JS. Эта цель достигается даже с interface{}. В этом контексте, что там ещё можно или нужно сделать лучше?

Причём даже ошибки типа среда показывает статически в выражении

fmt.Printf("%d","asdf")
Что ещё может быть нужно для полного счастья?

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Зачем ты ищешь альтернативы interface?

Для статических гарантий

Причём даже ошибки типа среда показывает статически в выражении

Какая среда? Компилятор не показывает. Это рантайм ошибка. Показывает линтер, но это не панацея.

feofan ★★★★★
()
Ответ на: комментарий от den73

А вообще- голанг - это не раст. Раст - это оркестр, а Голанг - это дудочка. Разные вещи для разных целей. Нет смысла говорить, что в голанге надо делать как в расте, или что раст нужен, а голанг не нужен, или наоборот.

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

VSCode с подключенным линтером. Панацеи нет, а для реальной работы линтер спасает.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Зачем тебе go, если ты используешь его как язык с динамической типизацией и самопальными исключениями? В результате получается «самобытный» неподдерживаемый код.

feofan ★★★★★
()
Ответ на: комментарий от feofan

получается «самобытный» неподдерживаемый код

Так ведь это и есть задача ТСа. Решать проблемы реального мира - это слишком низко для тру-лиспера.

anonymous
()
Ответ на: комментарий от feofan

Можешь посмотреть мой код и сколько там динамической типизации, хотя бы. Это будет более продуктивно, чем фантазии. Исключения использую, потому что это правильно, а авторы языка пытаются повесить лапшу на уши с какими-то непонятными целями.

den73 ★★★★★
() автор топика
Ответ на: комментарий от feofan

Аргументация в том же стиле, что и в вашем букваре. Они пишут «не используй панику, потому что это неправильно». Вопрос лишь в авторстве. При том, я пытался получить от тебя чёткие критерии, когда паника нужна, и результат получился плохой.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от feofan

Так ему и нужен динамический язык с исключениями, все верно. Так как подходящего под религиозные заскоки не нашлось, будет лепить свой из голанга. Все бы ничего, но ТС собрался вписаться в индустрию, трудновато ему будет с таким подходом.

anonymous
()
Ответ на: комментарий от anonymous

Ну тебе-то виднее меня, что мне нужно. Вот какая богатая фантазия. А исключения в голанге уже есть. Если поставить брекпойнт на gopanic или как она там, то он будет постоянно срабатывать, например, в gin приложении. А значит и понять их всё равно придётся. Так что те, если кто-то хочет язык без исключений, тем голанг не годится. То, что они назвали исключения другим словом - лишь маркетинговый приём, не более того.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 2)
Ответ на: комментарий от den73

Так то пишет дядька спайк или как его там, гуру короче. А ты нонейм. Видишь как ты уже подпалил жопы случайных адептов своими тредами. А что будет с индусом-начальником, который увидит твой самобытный код?

anonymous
()
Ответ на: комментарий от anonymous

Но решают-то я. Для меня я больший гуру, чем спайк. Потому что этих гуру один вред - практика это уже давно показала. Был Буч иконой, теперь Фаулер. Если ты инженер, надо думать своей головой, а не вывешивать иконостас и расшибать лоб об пол.

den73 ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А что будет с индусом-начальником

Ну я сначала научусь делать как надо, а потом уже как начальнику понравится. Хочет он выводит любую панику в лог и продолжать работать, а ошибки отправлять вверх - да будет так.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

Ещё один вариант, когда нужен тип «всё» - чтение результатов SQL запроса.

Не нужен. А то, что тебе он нужен, только доказывает твоё скрытое влечение к динамической типизации.

anonymous
()
Ответ на: комментарий от anonymous

А я говорю - нужен. А то, что тебе не нужен, только доказывает твоё скрытое влечение к неумеренному употреблению статической типизации.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Что значит неумеренное? Кто бы отказался вытащить максимальное количество ошибок из рантайма в стадию компиляции? Вопрос лишь в цене. Скажем, в жаве платишь слишком высокую цену, в более современных языках не столь высокую. А гоферы это халявщики: не хотим ничего платить, пусть расплачивается юзер.

anonymous
()
Ответ на: комментарий от feofan

ТС декларирует неприязнь к динамическим языкам вплоть до «такое говно не должно жить». Но на деле радостно скатывается в динамику даже там, где не нужно. Какой-то у него внутренний конфликт.

anonymous
()
Ответ на: комментарий от anonymous

Как нарочно вы тут наколдовали - уже час сижу и разгребаю динамическую типизацию в sqlx.StructScan. Которую, заметьте, не я туда воткнул.

den73 ★★★★★
() автор топика
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

и всё равно даже с паникой голанг будет быстрее питона и PHP.

Будет быстрее ждать базу? С притопами и прихлопами, а может и камаринскую спляшет?

anonymous
()
Ответ на: комментарий от anonymous

Если задача только ждать базу, то нет. Но ведь тот же фейсбук придумал язык Hack, чтобы ускорить свои PHP. Значит, было зачем. Правда, он его не так отчаянно пиарит, как какой-нибудь React. Может быть, проку вышло больше. Посмотрим...

https://github.com/facebook/hhvm/pulse/monthly

Не знаю, что это значит. Проект активен, коммиты достаточно интенсивные. Погляжу-ка на hh... Тишина. Хз.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Ты пишешь убийцу фейсбука? Но смотри, даже фейсбук живет на пхп, пусть и похаченном. Если придумаешь задачу, которая стала бы более узким местом, чем БД, то боюсь сразу выяснится, что голанг недостаточно эффективен для такой задачи. Весь этот хайп он про то как обслужить 100500 клиентов одновременно с наименьшими затратами, а не про сферическую скорость в вакууме. Причем, об удобстве программиста думали в последнюю очередь. Программист для корпорации гугль это такой придаток компилятора, т.е. это ты должен подправить мозги под голанг, а не он подстраиваться под твои нужды и привычки. Но ты чешешь против шерсти как обычно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.