Golang для продвинутых

Вы научитесь проверять утверждения о Go-коде запуском и приносить на ревью правку, которую принимают по профилю и бенчмарку, а не на слово. Тесты зелёные, а сервис под нагрузкой тормозит, горутины копятся, счётчик иногда возвращает не то число. Ставить ничего не нужно: вы отправляете функцию, платформа собирает её в программу и прогоняет на тестах. В бенчмарке из курса замена конкатенации в цикле сводит 999 аллокаций на операцию к одной.

Чему вы научитесь

Счётчик, который иногда врёт

Восемь горутин увеличивают общий счётчик, ошибок и паник нет. В трёх запусках из первых пяти ответ ровно 8000, и код кажется рабочим. Из 200 запусков верный ответ дали 49, а в остальных от 5 240 до 7 993.

Курс учит не доверять удачному запуску. Детектор гонок называет строку и две горутины, которые пишут и читают один адрес, и это видно даже тогда, когда ответ совпал. Дальше вы выбираете между Mutex, RWMutex, atomic и errgroup и проверяете правку тем же флагом.

Что нужно знать

Базовый Go: синтаксис, функции, структуры, слайсы, мапы и ошибки. Синтаксис в курсе считается известным.

Если базы пока нет, начните с курса по основам Go: https://mentorix.ru/catalog/5c0fffeb-db23-4f1d-b307-22f88020a6fd

Установленный Go не нужен: задачи собираются и проверяются на платформе.

Правка и замер до и после

Медленное место ищет профиль, а не догадка. В бенчмарке строка из 1000 символов собирается через s += "x": почти треть времени уходит на копирование строк, ещё четверть на runtime.mallocgc, рядом работает фоновый GC.

После strings.Builder с Grow(n) на операцию остаётся одна аллокация вместо 999, а время падает в 155 раз. В профиле после правки время уходит в сам цикл. В курсе вы читаете pprof -top по flat и cum, снимаете heap-профиль и решаете, искать утечку по inuse_space или резать аллокации по alloc_space.

Где вывод перестаёт работать

GOMAXPROCS ограничивает число процессоров P, а не потоков. Горутина в блокирующем вызове держит свой поток, и рантайм заводит новый. На картинке 20 таких горутин подняли число потоков с 5 до 23, а предел в 8 потоков процесс не пережил.

У вывода есть граница. Опыт снят на одном прогоне, а в уроке тот же опыт дал 22 потока. Ждала горутина в системном вызове, сетевой ввод-вывод опыт не проверял. Курс разбирает GMP, work stealing и sysmon так же: сначала механизм, потом условия, при которых он работает.

Что вы сдаёте и как это проверяют

Вы сдаёте функцию на Go. Платформа собирает её в программу, компилирует и прогоняет на тестах, как CI на работе. Засчитывается код, который работает. В условии лежит полный код этой программы, её можно скопировать и запустить у себя.

Многие задачи построены на выводе настоящих инструментов: разобрать лог -m по файлам, решить по правилам escape-анализа, куча или стек, найти функцию с наибольшим cum% в pprof -top, выбрать победителя бенчмарков по allocs/op. Там, где рантайм недетерминирован, задача — модель по правилам урока: work stealing между P, вытеснение горутины по порогу, срабатывание GC по GOGC. Поэтому проверка воспроизводима.

На картинке пример сверки прогнозов с компилятором. Прогноз «массив на 1 МБ уйдёт в кучу» не подтвердился: вывод -m надёжнее правила из памяти.

Для кого

Go-разработчикам, которые уверенно пишут на языке, но не могут по профилю объяснить, куда уходят процессор и память.

Backend-инженерам, у которых сервис держит много горутин: утечки, гонки, таймауты, корректная остановка.

Тем, кто ревьюит правки производительности и хочет принимать их по бенчмарку и профилю, а не на слово.

Поддержка

Вы также можете задать любой вопрос по курсу у поддержки t.me/mentorix_support

Программа курса

Модулей: 9, уроков: 54. Задачи с кодом проверяются автоматически.

  1. Система типов и интерфейсы

  2. Конкурентность и горутины

  3. Синхронизация и безопасность данных

  4. Сетевое программирование и HTTP

  5. Тестирование и профилирование

  6. Архитектура Go-приложений

  7. Внутренности рантайма и оптимизация

  8. Надёжный production-сервис

  9. Дженерики, рефлексия и кодогенерация

Стоимость курса: 8990 ₽

Открыть курс на Mentorix · Все курсы