TGViewer
Cross Join - канал о разработке Cross Join - канал о разработке @crossjoin · 3.83K subscribers
Post #8 537
Есть вещи, с которыми сложно смириться в языке Go.

Переходя на Go с другого языка, проходишь все стадии: отрицание, гнев, торг, депрессия, принятие. Ибо язык сильно отличается от классических Java, PHP, JS и их общепринятых стандартов написания кода. Паттерны-фигаттерны, которые вы учили, можно забыть.

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

Но с некоторыми вещами смириться все же по-настоящему сложно.

Во-первых, это, конечно же, бесконечное

if err != nil {
return nil, err
}

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

Существует proposal (https://habr.com/ru/post/472758/ ), упрощающий синтаксис обработки ошибок при вызове фунций. Такая же явная обработка, как и раньше, только в 10 раз меньше писанины. Примерно аналогичная штука есть в Rust (пишешь знак ? и проброс ошибок происходит автоматически, оставаясь при этом явным).

Но нет же, прошло почти 2 года, а proposal так и остался предложением. Видимо, дополнительное ключевое слово - это капец слишком сложно.

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

//go:generate stringer -type=Pill
//go:embed assets/*

они выглядят как комментарии, подсвечиваются в IDE как комментарии, но на самом деле не они. Непонятно, для кого сделано такое упрощение, разве что для токенайзера. Точно не для людей )

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

Повсеместно используются сокращения в именах переменных. Можно увидеть, как server сокращено до srv или даже s. Writer точно будет w, а Logger - l. Если вы пришли из C, то вам норм. Если вы из Java, то будет больно.

Дублирование кода. Дженериков пока что нет, и приходится дублировать или автогенерировать дублированный код. Но даже если не брать такую ситуацию, дублирование в Go считается норм. "A little copying is better than a little dependency" - один из основных постулатов.

В целом, Go хорош для написания написания эффективных микросервисов, он эффективно использует ресурсы и всё такое, но до чего же он странный ))))))
  • 👀 2
  • ❤ 1
More from @crossjoin
  1. Oct 2, 2026Теперь у нас у всех есть простой способ поддерживать знание иностранного языка. Просто раз…
  2. Oct 2, 2026Вышел NATS Server 2.15.0 Самое важное: • Надёжнее работа JetStream-кластера. Масштабирован…
  3. Sep 29, 2026😱 Отправили свое резюме на 129 вакансий на хх, а в ответ тишина .. Думаете, что дело в ры…
  4. Sep 28, 2026Слышал недавно в каком-то подкасте мысль, что Haskell плохо подходит для вайбкодинга прост…
  5. Sep 26, 2026Антон Жиянов написал мини-книгу по Go-concurrency. Это что-то вроде плотного конспекта с и…
  6. Sep 22, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →