Есть вещи, с которыми сложно смириться в языке 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 хорош для написания написания эффективных микросервисов, он эффективно использует ресурсы и всё такое, но до чего же он странный ))))))
Post #8
537
- 👀 2
- ❤ 1