LINUX.ORG.RU

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

 , ,


0

3

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

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

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

★★★★★

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

Воу воу воу... Давай так. Что ты хочешь получить из Го? Ты хочешь получить многоцелевой выразительный язык?

Давай я тебе расскажу. https://lenta.ru/news/2013/09/16/kant/

1) Го лэнг создан ГУГЛ для того чтоб те кто не умеют в C++ могли писать высокопроизводительные программы.

2) См пункт 1. Из Го убраны ВСЕ сложные парадигмы.

3) см пункт 1. Из Го убраны все возможности которые не нужны Гугл.

Теперь вопрос. Вот ты пришел и видишь кучу людей в парке которые бухают бухишко и днем херачат на заводе. И они могут объяснить тебе что «Штихель штихелю — рознь!» а ты им «Оставьте меня! Я тоскую, как Блок.».

В Го никогда не появится то, что не нужно гуглу. И наоборот если гуглу станут не нужны горутины они исчезнут из Го.

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

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

Я обеими руками за stack trace, но это не значит, что на обработку ошибок нужно забить. А именно это и хочет ТС.

Нет нельзя забить. Но у тебя простая программа.

1) Она читает файл.

2) Делает вычисление.

3) Пишет результат в другой файл.

Предположим у тебя проблема с чтением 1 или с записью 3. Обрабатывай.

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

В любом случае их многие ругают, почему-то.

Тут перечислены некоторые ругательства.

В дополнение к этому: checked exceptions неудобны при использовании Stream API и прочей (около)функциональщины. В итоге, например, в JDK8 есть UncheckedIOException — враппер над checked IOException.

Ещё пример: в AWS SDK для Java все исключения — unchecked. Мотивация

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

Удивительно. Я когда общался с Java тогда еще матюкался на эти эксепшены которые я ОБЯЗАН обработать, даже если и не знаю как.... И я уверен что миллионы Индусов просто глушили их и все.

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

Ты хочешь получить многоцелевой выразительный язык?

Я уже написал - денег хочу. Язык нормальный, годный. Java и Python религиозно неприемлемы. Но я прихожу со своим синдромом утёнка, цыплёнка и котёнка, и хочу, чтобы было хорошо. В меру хочу. Не особо сильно. Но достаточно, чтобы завести такую темку на ЛОРе.

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

Я уже написал - денег хочу. Язык нормальный, годный.

Денег или Язык? Ты реши. Хочешь денег иди в 1С.

Но я прихожу со своим синдромом утёнка, цыплёнка и котёнка, и хочу, чтобы было хорошо.

Ты погибнешь.

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

Компилируемый в машкод язык без макропроцессора, со сборкой мусора, с упором в простоту, с рефлексией из коробки, с простой и встроенной модульностью, с отсутствием отдельных заголовочных файлов (экспорты определяются синтаксисом), со смазанной границей между value type и reference type, но при этом с наличием указателей. Вот что слёту могу во втором часу ночи вспомнить.

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

Деньги в 1С были только до 2014 года. Да я уже решил, тут особо нечего обсуждать. Голанг, бекенд, микросервисы, всё такое вот. Востребованность есть, зарплаты от 300 есть (хотя до них мне долго ещё учиться). Насчёт погибну - все там будем. У меня это непафосное. Сделаю то, что возможно, фанатеть не буду. Всё равно ж, как тут отметили, работать придётся в команде и соблюдать все эти говноправила.

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

Ну смотря где. Сейчас у нас еще они есть. Просто потому, что есть рынок. А в другом. Что ты хочешь? Ты даже на Java и Python ничего не найдешь. Тут тебя в Go кинуло. Может Forth еще захочешь? Тут деньги есть в массовом рынке. Массовый рынок в 1С. Сам ты не сможешь писать, а вот подмять область легко. Или ты хочешь быть EPAM? Или писать для военки под Байкал? Если под байкал надень пагоны и маршируй... генерал тебя поздравит. Го обречен. Это понятно уже год. Хочешь денег ищи что будет потом. Вот тогда откроешь курсы, втюхаешь народу их и будешь с блондинками на геленвагене...

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

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

Прошлая тема тут:

Golang взлетает?

Про шаблонизатор не знаю. Какой-то шаблонизатор есть. При наличии спроса неважно, есть ли шаблонизатор.

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

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

Нет и это и есть признак смерти Го. Ты не понимаешь?

Ответь на несколько вопросов.

1) Где создан Го.

2) Какие есть альтернативные реализации Го.

3) Могут ли фичи не выгодные создателем попасть в Го?

4) Почему столько хайпа?

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

В джаве реализация немного неудобная - если в текущей функции не хочешь обрабатывать исключения, то надо скопипастить всё что может быть брошено в сигнатуру функции. Думаю можно было бы добавить что-то типа throws * для передачи обработки наверх.

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

И в Python это за раз ищется… И это прекрасно

Так я не говорю, что Python плох, я говорю, что везде можно нагадить.

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

Мне не нравится Python только тем, что он медленный (на некоторых операциях он ОЧЕНЬ медленный). И синтаксис у него… своеобразный.

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

Ответь на несколько вопросов.

Как эти вопросы релевантны рынку труда? Го опенсорсный, может форкнуть его любой. Т.е. от гугла он не зависит. Не скажу, что он прямо совсем хорош, но уже вполне юзабелен. Ни одной баги я пока не встретил. Хайпа много, потому что уже полно языков, поляна занята - знаю по себе как разработчик ЯП. Без рекламы не продашь. Можно же первые три вопроса и про 1С задать. Да и 4-й тоже. Если сравнить с тем же Растом, то Го очень и очень хорошо выглядит.

Профайлер есть, как гугл говорит. Не пробовал. Зато Code Coverage лично видел :) Отладчик есть, IDE есть, библиотеки есть.

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

Мне Python нравится в первую очередь тем, что он сразу вываливается в трейс

В рантайме под нагрузкой

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

Это ты не видел как течет память в библиотеках. Такое найти в питоне очень и очень трудно. Разыменование указателя в Golang быстро.

Мне не нравится Python только тем, что он медленный (на некоторых операциях он ОЧЕНЬ медленный). И синтаксис у него… своеобразный.

Я не видел больших проектов на Golang, не могу рассуждать о нем. А вот питон с более 1 млн строк кода видел. Людям пришлось покрыть весь код юнит тестами, чтобы какая-нибудь неудачная запятая или что-то подобное не ломало проект в рантайме. Т.е. они фактически выполнили функцию компилятора. Это не говоря об отсутствии указателей. Все для чего питон можно использовать - юпитер.

xpahos ★★★★★ ()

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

Заучивай, как мантру:

  • Errors are values.
  • Don’t just check errors, handle them gracefully.
  • Don’t panic.

https://go-proverbs.github.io/

На самом деле за этим более глубокий смысл, но для тебя и мантры хватит.

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

Это ты меня не разубеждаешь, а вразумляешь, т.е. аппелируешь не к разуму, но к вере. Credo quia absurdum

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

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

Он, как и многие другие, пытается донести до вас простую вещь: в чужой монастырь со своим уставом не лезут.

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

Своим упрямством вы подтверждаете афоризм, что программист на Фортране напишет программу на Фортране на любом языке программирования. Только в вашем случае Фортран нужно заменить на Яр Лисп.

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

Думаю можно было бы добавить что-то типа throws * для передачи обработки наверх.

Любопытно то, что в C++11 практически к такому и пришли. Если нет спецификатора noexcept — значит функция выпускает наружу исключения (практически аналог этого вашего throws *). А если noexcept есть — значит не бросает.

Но RazrFalcon-а этот вариант не устраивает.

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

Было 33 лексемы, осталось только 20

Тебя за каждое нажатие кнопки бьют током?

Код не стал более понятным и читаемым, потому что ты добавил туда неявного поведения. Явная обработка ошибок в го - хоть и многословна, но в разы лучше этих ваших исключений, непонятно откуда появляющихся и где обрабатываемых. Сейчас As и Is завезут и вообще будет счастье.

Помимо этого panic и recover - очень дорогие и тормознутые.

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

Ладно. Всё понял. Я-то думал, я на форуме инженеров, а ЛОР решил быть в тренде и переходить на самую главную науку - теологию. Мантры, монастыри, уставы, софийская ересь. Поставлю-ка я галочку. Тема была реально полезной, всем спасибо!

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

Помимо этого panic и recover - очень дорогие и тормознутые.

Пруфлинк можно, пожалуйста? Я эту тему как раз недавно изучал по С++ и нашёл статью, в которой с цифрами доказывается, что в С++ исключения нифига не дорогие, во всяком случае, в одном конкретном компиляторе и на одной конкретной платформе. Т.е. вообще говоря, мнение о дороговизне исключений на сегодня неактуально. Есть какая-то специфика именно голанга?

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

Я-то думал, я на форуме инженеров

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

И не то, что просто обсуждают. А навязывают, вплоть до использования специализированных инструментов, которые автоматически перефоматируют исходник под нужный стиль. А в современных языках даже компиляторы ругаются, если имена определенных сущностей не удовлетворяют требованиям «стандарта».

Или это для вас так же монастыри, уставы и ересь?

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

Я эту тему как раз недавно изучал по С++ и нашёл статью, в которой с цифрами доказывается, что в С++ исключения нифига не дорогие, во всяком случае, в одном конкретном компиляторе и на одной конкретной платформе.

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

Суть вот в чем. Когда исключения в C++ появились, для их поддержки компилятор расставлял дополнительные инструкции при входе в функцию и выходе из нее. За счет выполнения этих инструкций исключения оказывались не бесплатными даже если они не бросались.

Затем был придуман и воплощен второй способ, когда компилятор строил специальные таблицы адресов. При выбрасывании исключения по таблице определялось откуда исключение вылетело и где находится ближайший catch. Таким образом, удалось избежать накладных расходов в случае, если исключение не бросается. Именно этот способ и называют «бесплатные исключения». Но бесплатность относится только к сценарию, когда исключения не бросаются. Нет исключений — ничего не платишь.

Но если исключение брошено, то его стоимость оказывается сильно дороже (если не ошибаюсь, то речь идет о паре порядков), чем возврат кода ошибки. Поэтому и высказываются в интернетах рекомендации, что если исключения выбрасываются более чем в 1% случаев, то их стоимость будет ощутима и в этих местах от исключений нужно переходить к кодам ошибок.

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

Авторы сказали нельзя - значит нельзя. Что тут непонятного - загадка.

Почему они так решили непонятно. Это же не религия, а инженерный инструмент.

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

Нет, слушай, это религия. Нужно серьёзно относиться к тому, что написал ЛОР. Мы получили срез общества и видим, что общество мыслит религиозно, а не инженерно. Ведь может быть, что и мои будущие коллеги/работодатели находятся среди написавших. Тот, кто крест кладёт не по писанному, тот становится изгоем.

И ещё я понял, что не страшно раскрывать любые инновации. В религиозно мыслящем обществе их просто отвергнут, даже если они ведут к улучшениям. Можно в открытую пользоваться конкурентным преимуществом, рассказывать о нём и совершенно не бояться, что кто нибудь его переймёт. Ибо крепка вера народная. Когда я делал «Яр», мне это мешало. Но теперь я понимаю, что я просто неправильно применял саму идею инновации.

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

В Go 2 будет тебе обработка ошибок:

Грядут, грядут антихристы, хотят покуситься на веру отцов наших. Просто ЛОЛ после всего вышесказанного про мантры и монастыри.

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

В рантайме под нагрузкой

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

mord0d ()