Ну что, первый технический пост. Как писал в интро — заканчиваю курс по Go в Яндекс Практикуме и уже пробую его в боевых проектах. После 18 лет на PHP ощущения... специфические. Делюсь тем, что реально зацепило 👇
Обработка ошибок — никаких try/catch
Функция возвращает ошибку, и ты обязан разобраться с ней прямо здесь. Не "где-то наверху в catch", не "потом". Сейчас.
file, err := os.Open("config.yaml")
if err != nil {
return fmt.Errorf("failed to open config: %w", err)
}
Первую неделю это раздражает — код разбухает,
if err != nil преследует во сне. Потом замечаешь: в проде перестают всплывать те самые "а откуда это прилетело?" ошибки. Стоит того.Стандартная библиотека
HTTP-сервер, JSON, крипто, тесты — всё из коробки. На PHP я бы сначала полчаса ковырял composer.json и подключал пакетов десять, прежде чем написать первую строчку логики.
Деплой — один бинарник
Без PHP-FPM, без Nginx, без
composer install на сервере. Собрал, скопировал, запустил. Кто танцевал с конфигами на пяти e-commerce площадках — тот поймёт, какое это облегчение.Горутины вместо "один запрос — один процесс"
Конкурентность встроена в язык, а не прикручена расширением. Это не просто фича — это другой способ думать об архитектуре.
Типизация без компромиссов
PHP годами добавлял type hints. В Go типы — не пожелание, а требование. Компилятор ловит то, что раньше ловили юнит-тесты (если они были).
Go не лучше PHP — они про разное. Но после 18 лет в одной экосистеме полезно увидеть знакомые задачи с другой стороны. Буду делиться процессом — подписывайтесь, если тема близка 🤔