Pull to refresh

Comments 8

Если пытаться писать «как в Java» с try/catch или тащить Python‑подходы, код превращается в громоздкие обёртки и цепочки ошибок, из‑за чего теряется главное преимущество Go — прозрачность и лёгкость сопровождения.

Честно говоря не замечал что из-за try/catch код превращается во что-то более громоздкое чем обработка ошибок в go...

try/catch в main() и пусть потом кто-то другой занимается извращенными видами секса в понимании того, что пошло не так в остальном коде на 100500 строк.
Видел такое неоднократно и сам подобным грешил на python. В Go есть паники и возможность поймать (при определенных условиях), но это ни разу не try/catch.А если лень прямо сейчас подумать как обработать ошибку - просто кидай ошибку в панику. Либо вернешься позже и допишешь либо оно паникнет и скорее всего это случится еще до прода.

Да, это более явно/очевидно. Но не менее громоздко. И понять где случилась ошибка не так уж трудно? Есть же stack trace.

По своему опыту не помню вообще никаких особых проблем с try/catch и определением где именно произошло исключение. Практически всегда есть трейс который прямо говорит что вот в таком то файле, на такой-то строке возникло такое-то исключение

Подход в го дисциплинирует, но вот назвать его менее громоздким что-то сложно

Проблема не сместом, а с тем почему там паникнуло.
Трейс содержит где эксепшен, и как к нему подобрались где, а почему (в частности на каких именно данных) - это подключайте гадание на кофейной гуще.
Если я пишу ошибку я чаще всего выведу еще и то, что не прошло парсинг или проверку.
Классика сюжета - вам ответ не API в Json вернул, а гейтвей в HTML - ну "очень информативно" получить трейс на падении парсинга JSON без того на чем оно споткнулось.

>defer ticker.Stop() // Гарантированно освобождаем ресурсы
...и почему я все время чувствую себя в time-machine?

Уже (лень искать с какой версии) даже time.After стало не грешно использовать без опасений утечки памяти.... Но, да, давайте продолжать пользоваться древними версиями языка и продолжать подстилать соломку там где уже давно не надо.

b.ResetTimer()

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

...и почему я все время чувствую себя в time-machine?

в 1.24 ticker.Stop() не нужен?

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

Первый принцип идиоматики Go — простота и читаемость. Идиоматичный Go-код должен быть простым и понятным, без лишних абстракций. 

...

Среди сторонних библиотек выделяются для веб- и HTTP-API — лёгкие и быстрые gin или fiber. 

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

Sign up to leave a comment.