Перейти к содержимому
Учи.Онлайн Выбрать школу
Статья

Go: что это, где применяется и как освоить

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

Автор: редакция Учи.ОнлайнОтветственный редактор: Дмитрий Игнатьев
Содержание
Иллюстрация к статье: Go

Главное отличие 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 свои соглашения.

  1. Установить актуальную версию с go.dev, создать модуль командой go mod init, написать и собрать первую программу. На сентябрь 2026 года свежий выпуск — Go 1.27, а по политике выпусков исправления получают две последние основные версии.
  2. Синтаксис, срезы, карты, структуры и методы; обработка ошибок через возвращаемое значение error и проверку if err != nil.
  3. Стандартная библиотека для утилит: os, bufio, flag, encoding/json, encoding/csv, net/http.
  4. Тесты: пакет testing, табличные тесты, go test, go vet.
  5. Интерфейсы и пакеты: как разбить утилиту на части и подменять зависимости в тестах.
  6. Горутины, каналы, sync.WaitGroup, пакет context для таймаутов и отмены.
  7. Сборка под разные системы, 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. Прежде чем платить, напишите утилиту из учебного примера по документации: если она заработала за выходные, вам, скорее всего, нужен продвинутый курс или вовсе хватит самостоятельной практики, а если застряли на горутинах и ошибках — программа с наставником сэкономит месяцы.