Go: что это, где применяется и как освоить
Go (Golang) — компилируемый язык от Google, на котором пишут сетевые сервисы, консольные утилиты и инструменты для инфраструктуры. Программа на Go собирается в один исполняемый файл, который запускают на сервере или в контейнере без установки интерпретатора и библиотек. Владеть языком полезно DevOps-инженеру, который автоматизирует проверки и деплой, бэкенд-разработчику, переходящему с Python, PHP или Java, и аналитику, которому нужна быстрая утилита для обработки файлов. Осваивают синтаксис, работу с ошибками, горутины, стандартную библиотеку, тесты и сборку.
Содержание

Главное отличие Go для такого читателя — не скорость, а простота доставки результата. Скрипт на Python нужно запускать там, где стоит нужная версия интерпретатора и пакеты. Утилиту на Go собирают командой go build, а для другой системы достаточно задать переменные GOOS и GOARCH: на ноутбуке с macOS получается файл для Linux-сервера. Поэтому первая осмысленная задача на Go — не веб-сервис с базой данных, а небольшой инструмент, который коллеги запустят одной командой.
Какие задачи Go решает вне профессии Go-разработчика
На Go написаны Docker, Kubernetes, Terraform и Prometheus, поэтому DevOps-инженер встречает этот язык раньше, чем решает его учить. Навык нужен, когда готовых настроек не хватает: написать экспортер метрик для внутреннего сервиса, консольную команду для выкладки релиза, проверку конфигураций перед деплоем, небольшой контроллер для Kubernetes.
Бэкенд-разработчику на другом языке Go нужен, когда команда выносит нагруженную часть системы в отдельный сервис: шлюз, обработчик очереди. HTTP, SQL и тесты уже знакомы, новыми будут явная обработка ошибок вместо исключений, горутины и каналы вместо потоков и привычка обходиться стандартной библиотекой.
Аналитику Go пригодится реже: разобрать гигабайтный лог, пройтись по сотням CSV-файлов, выгрузить данные из API и отдать коллегам утилиту без установки Python. Для исследования данных, графиков и моделей Go проигрывает Python с pandas, а пятистрочную склейку команд проще написать на shell.
Учебный пример: проверка доступности сервисов перед релизом
Учебная ситуация. Перед выкладкой релиза нужно убедиться, что двадцать внутренних сервисов отвечают на адрес /health. Сейчас это делает bash-скрипт, который опрашивает их по очереди и на медленном сервисе ждёт до таймаута, так что проверка занимает минуту. Задача — написать утилиту healthcheck, которая читает список адресов из файла, опрашивает все сервисы одновременно, ждёт каждого не больше двух секунд, печатает таблицу и завершается с кодом 1, если хоть один сервис не ответил. Код возврата нужен, чтобы CI-система остановила деплой.
Решение укладывается в несколько десятков строк стандартной библиотеки. Пакет os читает файл, net/http с клиентом, у которого задан Timeout, делает запросы. Для каждого адреса запускается горутина — лёгкая функция, которая выполняется параллельно с остальными, а результаты собираются через канал:
results := make(chan result)
for _, url := range urls {
go func(u string) {
resp, err := client.Get(u)
results <- check(u, resp, err)
}(url)
}
Главный цикл принимает из канала столько результатов, сколько было адресов, считает неудачи и вызывает os.Exit(1), если их больше нуля. Результат проверяют так: время работы равно времени самого медленного сервиса, а не сумме ожиданий; заведомо неверный адрес попадает в таблицу и даёт код 1; тест с пакетом net/http/httptest поднимает поддельный сервер с задержкой и показывает, что таймаут срабатывает.
Сколько процессоров видит программа в контейнере
Утилиты и сервисы на Go обычно работают в контейнерах, и здесь есть тонкость, о которой редко пишут в учебных материалах. Параметр GOMAXPROCS определяет, сколько потоков операционной системы одновременно выполняют Go-код. До версии 1.25 он по умолчанию равнялся числу логических процессоров машины. Контейнер с лимитом в 2 CPU на сервере со 128 ядрами получал GOMAXPROCS=128: программа пыталась занять больше процессорного времени, чем ей выделено, ядро Linux её притормаживало, а период такого ограничения по умолчанию — 100 миллисекунд, что заметно на времени ответа.
В примечаниях к выпуску Go 1.25 (август 2025 года) поведение изменилось. На Linux среда выполнения учитывает лимит процессорного времени cgroup и, если он ниже числа процессоров, берёт его. В Kubernetes это соответствует параметру CPU limit, а CPU requests Go не учитывает: под с requests, но без limits по-прежнему получит число ядер узла. Кроме того, значение теперь периодически обновляется, если лимит меняется на ходу. Оба механизма отключаются, если задать GOMAXPROCS вручную переменной окружения или вызовом runtime.GOMAXPROCS, а также настройками GODEBUG containermaxprocs=0 и updatemaxprocs=0.
Практическое следствие описано в статье команды Go от 20 августа 2025 года: новое поведение включается, когда в go.mod указана версия go 1.25.0 или выше. Проект, собранный свежим компилятором, но с устаревшей строкой go в go.mod, сохраняет старое значение по умолчанию. Дробный лимит Go округляет вверх: при 2,5 CPU получится 3. Если у Go-сервиса в Kubernetes скачет задержка, сначала проверьте строку go в go.mod, лимиты пода и не задан ли GOMAXPROCS в манифесте вручную.
В каком порядке осваивать
Порядок ниже построен так, чтобы каждая следующая тема опиралась на уже работающую программу. Сначала нужен инструмент, который можно запустить и отдать коллеге, потом тесты, которые подтверждают, что он работает, и только затем параллельность: горутины без понимания ошибок и тестов дают код, который работает через раз. Если вы уже программируете, первые шаги займут дни, но пропускать их не стоит — в Go свои соглашения.
- Установить актуальную версию с go.dev, создать модуль командой
go mod init, написать и собрать первую программу. На сентябрь 2026 года свежий выпуск — Go 1.27, а по политике выпусков исправления получают две последние основные версии. - Синтаксис, срезы, карты, структуры и методы; обработка ошибок через возвращаемое значение
errorи проверкуif err != nil. - Стандартная библиотека для утилит:
os,bufio,flag,encoding/json,encoding/csv,net/http. - Тесты: пакет
testing, табличные тесты,go test,go vet. - Интерфейсы и пакеты: как разбить утилиту на части и подменять зависимости в тестах.
- Горутины, каналы,
sync.WaitGroup, пакетcontextдля таймаутов и отмены. - Сборка под разные системы, Docker-образ из нескольких стадий, запуск в CI.
Для самостоятельного старта хватает официального интерактивного учебника A Tour of Go и документации к стандартной библиотеке. Структурированная программа нужна, когда хочется проверки кода и последовательности тем с проектами. На онлайн-курсе «Go-разработчик» от Бруноям шесть месяцев вебинаров в небольших группах: основы языка, REST API на Gin, PostgreSQL и Docker, горутины и каналы, архитектура и тестирование, а в конце — проект с защитой; отдельные модули посвящены Linux и Git.
Упражнения и типичные ошибки
Хорошие упражнения — маленькие утилиты с измеримым результатом. Напишите аналог wc и сравните вывод с системной командой. Сделайте конвертер CSV в JSON и проверьте его на файле с кавычками и переносами строк в ячейках. Ограничьте в утилите из примера число одновременных запросов пятью и убедитесь, что время выросло предсказуемо.
Новички чаще всего ошибаются в четырёх местах. Игнорируют ошибку через _, и программа молча продолжает работу с пустыми данными. Запускают горутины без WaitGroup или счётчика результатов, и main завершается раньше, чем они отработают. Одновременно пишут в общую карту из нескольких горутин и получают аварийную остановку; такие ошибки ловит запуск тестов с флагом -race. Наконец, используют http.Get с клиентом по умолчанию, у которого нет таймаута, и утилита зависает на одном медленном сервисе.
Если вы начинаете программировать с нуля — например, как аналитик, который до этого работал только с таблицами, — полезна программа, где задания проверяют вручную и объясняют ошибки. На курсе «Go-разработчик с нуля» Яндекс Практикума восемь месяцев занятий на интерактивном тренажёре с ревью проектов: от синтаксиса и интерфейсов до HTTP, SQL и многопоточных программ, есть темы по Linux, Docker и CI/CD, а итоговый проект — серверная часть планировщика задач с REST API и базой данных.
Как навык влияет на доход
Для DevOps-инженера и бэкенд-разработчика на другом языке Go чаще всего не отдельная профессия, а строка в требованиях вакансии: «опыт на Go будет плюсом». Навык расширяет круг задач — от настройки чужих инструментов к написанию своих операторов, экспортеров и сервисов, и именно это влияет на уровень позиции и оплату.
Ориентир по рынку даёт отчёт «Хабр Карьеры» о зарплатах в IT за первое полугодие 2026 года, рассчитанный по 45 226 анкетам по всей России: медианная зарплата специалистов, указавших Go основным языком, — 325 000 ₽ в месяц, четвёртое место среди языков и рост на 2 % к предыдущему полугодию. Это фактические зарплаты по анкетам, а не предложения в вакансиях, и за ними в основном стоят опытные разработчики. Переносить эту цифру на человека, который написал первую утилиту, нельзя. Аналитику Go обычно не добавляет отдельной надбавки, но экономит время на задачах, которые Excel и ручная обработка не вытягивают.
Чтобы оценить эффект для себя, посмотрите вакансии своей специальности в своём регионе: где Go в обязательных требованиях, а где в пожеланиях. Сравнивайте медианы и уточняйте, указана сумма до вычета налога или на руки.
Как выбрать обучение
Выбор программы зависит от того, с чем вы приходите. Тому, кто уже программирует или администрирует серверы, не нужны три месяца основ: полезнее сразу HTTP-серверы, конкурентность, профилирование и тесты.
Для действующих IT-специалистов рассчитан курс Нетологии «Go-разработчик PRO»: пять месяцев, 26 заданий и три проекта, среди которых конвейер обработки данных и REST API. Программа ориентирована на бэкенд-разработчиков, DevOps-инженеров и системных администраторов, которые уже знают Linux и Git.
При сравнении любых программ проверьте три вещи. Есть ли проект, похожий на ваши рабочие задачи: утилита, сервис, интеграция с API. Проверяет ли код живой человек, а не только автоматические тесты. На какой версии Go идёт обучение: материалы, записанные до выхода Go 1.21–1.22, не знают о пакете slog для логирования и об изменении переменной цикла, а до 1.25 — о новом поведении в контейнерах.
Сравнить онлайн-школы по цене, формату и отзывам можно в рейтинге онлайн-школ с обучением Go. Прежде чем платить, напишите утилиту из учебного примера по документации: если она заработала за выходные, вам, скорее всего, нужен продвинутый курс или вовсе хватит самостоятельной практики, а если застряли на горутинах и ошибках — программа с наставником сэкономит месяцы.