Почему не Golang

Golang показался довольно интересным языком, чтобы его попробовать. Прежде всего меня интересует контекст серверной бизнес-логики. Обычные фреймворки в этой сфере: Spring, RubyOnRails, Django.

Сначала написал несколько небольших утил (например, UDP Sniffer). Потом бек-енд проект средней сложности (нет в публичном доступе). Для понимания размера: 14 http-endpoints, 1 из них graphql (там еще больше 30 запросов и мутаций), Postgres.

При этом некоторые вещи в платформе сильно импонируют:

  1. Серьезное отношение к стандартной библиотеке: ожидается, что для большинства случае будет она использоваться, а не что-то стороннее.
  2. Единый автоматический стиль форматирования.
  3. Генерируемый исполняемый файл содержит все основные зависимости.
  4. Эффективное использование железа, особенно при низких нагрузках. Та же Java может даже быстрее работать, но запустить ее быстро и на малом железе весьма тяжело (нативная компиляция и прочее).
  5. Легкая кросс-компиляция.
  6. Интересный подход к многопоточности.
  7. Интересный стиль синтаксиса.
  8. Быстрая сборка.

В итоге, главное что не понравилось – обработка ошибок. В мире бизнес-логики мы обычно ничего не можем поделать с техническими ошибками – обычно просто возвращаем ошибку на запрос и нужны логи, чтобы разобраться что произошло. При этом Golang, чтобы получился stacktrace, предполагает явную обработку на каждом уровне вызова. Получается, что код увеличивается где-то в 3 раза и ценности это не несет.

Основной список проблем:

  1. Обработка ошибок. Подробно см. выше.
  2. Все еще достаточно мало Golang-пограммистов и их тяжелее найти или обучить, чем на тот же Kotlin.
  3. Медленная сборка. Но она же быстрая? Если учитывать кодогенерацию, то получается заметно медленнее Spring… А кодогенерация из-за ограниченности самого языка. Впрочем, в будущем, думаю появится какой-то кеш для кодогенерации и будет отрабатывать моментально. Но не сейчас.
  4. Синтаксис недостаточно проработан – во многих случаях слишком многословен.
  5. Начиная с какого-то размера проекта есть ощущение, что рост кодовой базы дается тяжело, тяжелее Java/Kotlin.

В целом, для консольных утил и для сетевых серверов он весьма подходит. Т.е. как замена С/С++/Python(cli).