Найти в Дзене

Миф о легкости Go: Почему после многих лет в Java вам не хватит выходных

В сети гуляет опасный миф: «Go настолько прост, что любой джавист выучит его за субботу и воскресенье». Как человек, который провел в экосистеме Java долгие годы, скажу честно: это ловушка.
Да, синтаксис Go можно выписать на одной салфетке. Но дьявол кроется не в ключевых словах, а в смене парадигмы. Вы быстро напишете свой первый микросервис. Вы восхититесь скоростью компиляции. Но как только дело дойдет до реальной архитектуры, ваш внутренний Java-архитектор начнет требовать: В Java мы привыкли к четким контрактам: class A implements B. В Go интерфейсы реализуются неявно. Это «магия», к которой нужно привыкнуть. Вы не говорите системе, кто вы — вы просто делаете то, что от вас ждут. Для мозга, привыкшего к строгим иерархиям Enterprise-класса, это настоящий культурный шок. После «безопасной» JVM, где за памятью следит Garbage Collector (и мы почти не думаем о ссылках), в Go вам придется снова вспомнить, что такое указатель. Передать по значению или по ссылке? Где произойдет аллокация
Оглавление

В сети гуляет опасный миф: «Go настолько прост, что любой джавист выучит его за субботу и воскресенье». Как человек, который провел в экосистеме Java долгие годы, скажу честно: это ловушка.

Да, синтаксис Go можно выписать на одной салфетке. Но дьявол кроется не в ключевых словах, а в
смене парадигмы.

🧊 Ловушка «Hello, World»

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

  • «Где мой DI-контейнер и @Autowired?»
  • «Почему я не могу просто наследоваться от этого класса?»
  • «Как я буду жить без Optional и привычных дженериков?»

🦆 Утиная типизация против строгой иерархии

В Java мы привыкли к четким контрактам: class A implements B. В Go интерфейсы реализуются неявно. Это «магия», к которой нужно привыкнуть. Вы не говорите системе, кто вы — вы просто делаете то, что от вас ждут. Для мозга, привыкшего к строгим иерархиям Enterprise-класса, это настоящий культурный шок.

📍 Возвращение к истокам: Указатели

После «безопасной» JVM, где за памятью следит Garbage Collector (и мы почти не думаем о ссылках), в Go вам придется снова вспомнить, что такое указатель. Передать по значению или по ссылке? Где произойдет аллокация в кучу? Для Тимлида это критические вопросы, которые влияют на ту самую «экономику в байтах», о которой мы говорили ранее.

-2

Итог

Go прост в изучении, но сложен в освоении. Истинный переход происходит не тогда, когда вы запомнили if err != nil, а когда вы перестали искать Spring там, где он не нужен.

Больше честных мыслей про архитектурный сдвиг и будни тимлида в моем канале:

👉 🐹 Go после Java: Записки Тимлида

Заходите, обсудим: что было самым сложным для вас при встрече с новым стеком?