go
Go с нуля до senior
Маленький язык для больших систем — типы, ошибки, интерфейсы и конкурентность, которая масштабируется.
Начать трек → 01
Типы, ошибки, интерфейсы
Весь дизайн Go — это явность: значения вместо ссылок, ошибки как значения, интерфейсы реализуются неявно. 02
Горутины, каналы, модель памяти
Горутины дёшевы, потому что их планирует рантайм; каналы и модель памяти — контракт безопасности. 03
HTTP-сервисы на stdlib
net/http — production-фреймворк: роутинг с 1.22, мидлвары как обёртки и таймауты, которые ставишь сам — иначе течёшь соединениями. 01 net/http как фреймворк: Handler, ServeMux 1.22 и маршрутизация без зависимостей 17 мин 02 Паттерны middleware: цепочки, порядок, context и ловушки обёртки ResponseWriter 18 мин 03 Таймауты и лимиты: нулевые значения, которые держат соединения вечно 19 мин 04 Graceful shutdown: Shutdown(ctx), проводка SIGTERM и почему деплои всё ещё роняют запросы 18 мин
04
Тестирование и тулчейн Go
Табличные тесты — идиома, фаззинг и бенчмарки встроены, а тулчейн (vet, race, pprof) — половина ценности языка. 01 Табличные тесты и сабтесты: кейсы как данные, t.Run и почему в Go нет assert-библиотеки 17 мин 02 Фаззинг и бенчмарки: входы по покрытию, b.Loop и честность через benchstat 19 мин 03 Моки, фейки и интерфейсы: тест-дублёры без тестирования дублёра 18 мин 04 Модули и тулчейн: MVS, go.sum, воркспейсы и инструменты CI 16 мин
05
Дженерики и дизайн пакетов
Дженерики убирают копипасту, а не интерфейсы: констрейнты — множества типов, инстанцирование на компиляции, и большинству кода всё ещё нужен интерфейс. 01 Параметры типов и constraints: множества типов, пределы вывода и GCShape-стенсилинг 18 мин 02 Когда дженерики, когда интерфейсы: решение, которое реально принимает senior-ревьюер 17 мин 03 Дизайн пакетов: имена как API, internal/, направление зависимостей и цикл, блокирующий хотфикс 19 мин 04 Ошибки как API: sentinel-ы, типы, контракт Is/As и %w, который сливает ваши внутренности 18 мин
06
Рантайм, GC и профилирование
GC в Go меняет пропускную способность на паузы меньше миллисекунды; escape analysis решает стек или куча, а pprof показывает, в какой миф ты верил. 01 Память и escape-анализ: кто решает «стек или куча» и сколько на самом деле стоит аллокация 18 мин 02 Механика и тюнинг GC: трёхцветный mark-sweep, пейсер, GOGC и GOMEMLIMIT без мифов 19 мин 03 pprof от и до: профили CPU, heap, goroutine и mutex — от живого сервиса до утечки 19 мин 04 Бенчмарки реальных сервисов: перцентили, coordinated omission и цикл оптимизации 18 мин
07
Production-паттерны
Production Go — это дисциплина: context течёт вниз по каждому вызову, конфиг явный, логи — структурный slog, ретраи уважают бюджеты. 01 Дисциплина context: отмена, дедлайны и значения, текущие вниз по цепочке вызовов 18 мин 02 Конфигурация без магии: env, флаги, файлы и типизированный Config, падающий на старте 17 мин 03 Структурное логирование slog: хендлеры, атрибуты, уровни и цена каждой строки 18 мин 04 Ретраи и устойчивость: бэкофф с джиттером, бюджеты ретраев и circuit breaker 19 мин
08
Доступ к данным: database/sql и дальше
database/sql — это пул, а не соединение: кривой размер пула душит под нагрузкой, транзакции пиннят соединения, sqlc генерирует рутину. 09
gRPC и контракты API
gRPC — компилятор контрактов: protobuf-схемы версионируются только добавлением, ломающие изменения требуют новых полей, gateway транслирует в REST. 01 gRPC и protobuf: скомпилированный контракт, транспорт HTTP/2 и балансировщик, не заметивший новые поды 19 мин 02 Версионирование контрактов: эволюция добавлением, reserved для мёртвых тегов и buf breaking на страже 17 мин 03 Gateway и REST: аннотации google.api.http, пределы транскодинга, gRPC-Web и альтернатива ConnectRPC 17 мин
10
Продвинутая конкурентность
errgroup пробрасывает первую ошибку и отменяет соседей; пайплайн обязан умирать по отмене контекста, иначе течёт горутинами; backpressure лучше буферов. 01 errgroup как структурная конкурентность: горутины в регионе, отмена по первой ошибке и SetLimit 18 мин 02 Пайплайны под отменой: защищённые send, дисциплина закрытия и каноничная утечка горутин 18 мин 03 Семафоры и backpressure: ограничение работы на каждой границе, пока очередь не стала аварией 17 мин 04 Постмортемы дедлоков: инверсия порядка локов, канал под мьютексом и чтение дампа горутин 19 мин
11
Безопасность и supply chain
Криптография — из stdlib и без самодеятельности: constant-time сравнения, настоящая случайность, govulncheck в CI, минимальные образы по умолчанию. 01 Криптография из stdlib без самодеятельности: argon2 для паролей, константное время и инвариант nonce в GCM 19 мин 02 govulncheck и гигиена зависимостей: достижимость на уровне символов, целостность go.sum и MVS без сюрпризов 17 мин 03 Минимальные контейнерные образы для Go: лестница площади атаки от ubuntu до scratch через multi-stage 18 мин
12
Деплой и эксплуатация
Go-бинарник и есть артефакт деплоя: статическая линковка и кросс-компиляция, scratch-контейнеры, health-пробы на реальную готовность. 01 Статические бинарники и кросс-компиляция: CGO_ENABLED=0, загадка пропавшего ld-linux и дисциплина флагов сборки 18 мин 02 Go в контейнерах: GOMAXPROCS против квоты CPU, GOMEMLIMIT против OOM и multi-stage Dockerfile с правильным кэшем 18 мин 03 Health-пробы и жизненный цикл: liveness, readiness, startup и последовательность остановки без потерянных запросов 18 мин
13
Системные проекты
Go — клей для систем: CLI с честными exit-кодами, демоны под systemd, процессы, файлы и блокировки без ошибок.Проекты по этому треку
Guided-проекты, которые закрепляют изученное здесь.
Docker: контейнеры как система
За пределы «напиши Dockerfile» — как на самом деле работают образы, namespaces, BuildKit и реестры, и как контейнеры ведут себя в проде.