Перейти к содержимому

Middle 1 Go — технологии под капотом

Глубокий разбор технологий уровня Middle 1: внутренности runtime, паттерны concurrency, БД, архитектура, observability, инфраструктура, брокеры. Дополнение к ../02-middle-1.md, но другого формата — отдельный файл на каждую тему.

30 файлов, ~30 000 строк (~1.1 МБ). Подходит как настольный справочник на собес 2026. Версия Go — 1.22+ (с фичами 1.21/1.23/1.24 где уместно).

Предполагается, что джун-материалы из ../01-junior-tech/ уже изучены. Здесь — следующий уровень: внутренности структур runtime, production-кейсы, реальные паттерны.


1. Базовая концепция — короткое введение, без воды
2. Под капотом — runtime структуры, ASCII-схемы, dispatch механики
3. Gotchas — 8-12 реальных подвохов с кодом
4. Производительность — оптимизации, бенчмарки
5. Когда использовать — альтернативы, trade-offs
6. Вопросы с собеса — 20-30 вопросов с развёрнутыми ответами
7. Practice — 5-8 задач с решениями
8. Источники — Go blog, runtime sources, статьи Habr 2024-2026

#ФайлГлавные темыСтрок
0101-interfaces-internals.mdiface/eface/itab из runtime/iface.go, itab cache, assertI2I/E2I, FAST vs SLOW path, dynamic dispatch cost1054
0202-generics.mdType parameters, constraints, type sets, GCShape stenciling, dictionary, бенчмарки vs interface1089
0303-reflect-unsafe.mdreflect Type/Value/Kind, DeepEqual, 4 правила unsafe.Pointer, unsafe.String/SliceData (1.20+), noescape1001
0404-escape-analysis-memory-model.md-gcflags=“-m”, правила escape, happens-before, atomic memory ordering, race detector через shadow memory1005
#ФайлГлавные темыСтрок
0505-channels-select-internals.mdhchan structure, sendq/recvq, sudog, runtime.selectgo (2 passes), gopark/goready1040
0606-sync-advanced.mdMutex normal/starvation, RWMutex writer preference, Pool victim cache, sync.Map read/dirty, atomic 1.19+1180
0707-concurrency-patterns.mdWorker pool, errgroup (SetLimit), pipeline, fan-in/out, semaphore, singleflight, rate limiting, backpressure1509
0808-goroutine-leaks-debug.mdСценарии leak, pprof goroutine, uber/goleak, race detector, delve, testing/synctest (1.24+)1178
#ФайлГлавные темыСтрок
0909-gmp-deep.mdG/M/P структуры, work stealing (runqsteal), async preempt через SIGURG, syscall handoff, netpoll, sysmon1023
1010-gc-tuning.mdTri-color + hybrid Dijkstra/Yuasa, write barrier, pacer math, GOGC, GOMEMLIMIT в k8s (90% от лимита)1094
1111-pprof-profiling.mdCPU/heap/goroutine/block/mutex profiles, flat vs cum, flame graph, pprof -base, continuous profiling1130
1212-benchmarks-trace.mdb.N, deadcode elimination + sink, benchstat, runtime/trace, Flight Recorder (1.23+), b.Loop (1.24+)1270
#ФайлГлавные темыСтрок
1313-testing-advanced.mdt.Parallel/Cleanup/Helper, testify, gomock, mockery, testcontainers, golden files, coverage modes1028
1414-fuzz-testing.mdGo 1.18+ fuzz API, seeds, corpus, reproducing crashes, OSS-Fuzz, differential fuzzing776
#ФайлГлавные темыСтрок
1515-database-sql-pgx.mddatabase/sql pool tuning, prepared statements, pgx v5 (native protocol), CopyFrom, Listen/Notify881
1616-orm-builders.mdsqlx, squirrel, sqlc (рекомендуется), GORM, ent, bun — сравнение, N+1, когда что884
1717-transactions-migrations.mdIsolation levels, SSI в PostgreSQL, deadlock retry, UnitOfWork, SKIP LOCKED, golang-migrate/goose/atlas1123
#ФайлГлавные темыСтрок
1818-clean-architecture.mdClean/Hexagonal/Onion, dependency rule, Repository pattern, OrderService example850-1000
1919-ddd-and-di.mdDDD tactical (entity, VO, aggregate), manual DI vs wire vs fx, functional options850-1000
2020-project-layout.mdgolang-standards, internal/, cmd/, package naming, mono-repo, workspaces800-1000
#ФайлГлавные темыСтрок
2121-http-routers-middleware.mdGo 1.22 ServeMux, chi/gin/echo/fiber сравнение, middleware patterns, validator, OpenAPI, WebSocket1000-1200
2222-grpc.md4 типа RPC, buf, interceptors, status/codes, mTLS, Health Check, gRPC-Gateway, Connect-Go1000-1200
2323-graceful-shutdown.mdhttp.Shutdown vs Close, gRPC GracefulStop, signal.NotifyContext, k8s preStop800-1000
#ФайлГлавные темыСтрок
2424-logging-slog.mdslog (1.21+), JSONHandler, context propagation, zap/zerolog сравнение, sampling, PII masking779
2525-metrics-prometheus.mdCounter/Gauge/Histogram, client_golang, cardinality bomb, RED/USE, exemplars, SLI/SLO844
2626-tracing-otel.mdOTel API/SDK, W3C propagation, tail-based sampling, auto-instrumentation, OTLP Collector794
#ФайлГлавные темыСтрок
2727-docker-k8s.mdMulti-stage build, distroless, GOMEMLIMIT/automaxprocs, Deployment/Service/probes, HPA, Helm1051
#ФайлГлавные темыСтрок
2828-redis.mdgo-redis v9, структуры данных, pipelining vs MULTI/EXEC, cache-aside + singleflight, Redlock критика Kleppmann, Streams842
2929-kafka.mdfranz-go (рекомендуется 2026), idempotent producer, exactly-once, consumer groups, schema registry, DLQ, outbox, KRaft799
3030-nats-rabbit.mdNATS Core vs JetStream, queue groups, RabbitMQ exchanges, quorum queues (replace mirrored), publisher confirms828

Если времени мало — сначала эти:

  1. 05-channels-select-internals.md — hchan + select internals спрашивают почти всегда
  2. 01-interfaces-internals.md — iface/eface на лету разбирать
  3. 07-concurrency-patterns.md — попросят написать worker pool
  4. 09-gmp-deep.md — GMP-модель + work stealing
  5. 10-gc-tuning.md — tri-color, GOMEMLIMIT, pacer
  6. 15-database-sql-pgx.md — pgx v5 + pool tuning
  7. 18-clean-architecture.md + 19-ddd-and-di.md — как структурировать сервис
  8. 02-generics.md — стало популярной темой
  9. 25-metrics-prometheus.md — cardinality bomb, RED/USE
  10. 23-graceful-shutdown.md — k8s lifecycle, preStop
  • 04-escape-analysis... — closure capture → heap alloc (даже если переменная маленькая)
  • 05-channels-select... — single-case select оптимизируется компилятором
  • 06-sync-advanced — sync.Map медленнее обычного Mutex+map при равных read/write
  • 07-concurrency-patternstime.After в long-running select течёт памятью (use NewTimer + Stop)
  • 10-gc-tuning — забыли GOMEMLIMIT в k8s → OOM Kill при memory pressure
  • 15-database-sql... — SetMaxOpenConns не настроен → connection storm на проде
  • 17-transactions... — long-running transaction блокирует другие, deadlock без retry
  • 25-metrics-prometheus — label на user_id = cardinality bomb (миллион timeseries)
  • 27-docker-k8s — нет non-root user, нет distroless — security holes
  • 28-redis — Redlock не безопасен в edge cases (читать Kleppmann)
  • 29-kafka — auto-commit + crash = потерянные сообщения

  • Сводный ../02-middle-1.md — обзор всех тем + план изучения 6 месяцев + pet-проекты.
  • Папка ../01-junior-tech/ — основы (обязательно изучить до этой папки).
  • ../03-middle-2.md — следующий шаг: продвинутые distributed-системы, k8s deeper, security.
  • 30 markdown-файлов (+README)
  • ~30 000 строк
  • ~1.1 МБ материала
  • 700+ вопросов с собеса с ответами
  • 200+ компилируемых примеров кода
  • 25+ ASCII-схем (iface/eface/itab, hchan + sudog, GMP + work stealing, tri-color GC, pprof flow, Kafka partitions, K8s pod lifecycle и др.)