Junior Go — технологии под капотом
Глубокий разбор каждой технологии Junior-уровня: внутреннее устройство, ASCII-схемы памяти, ловушки (gotchas), вопросы с собеса. Дополнение к ../01-junior.md, но другого формата — здесь каждая тема в своём файле.
18 файлов, ~16 000 строк (~620 КБ). Подходит как настольный справочник на собес 2026. Версия Go — 1.22+ (учтены изменения loopvar, enhanced ServeMux). Где важно — указаны фичи Go 1.20, 1.21, 1.23, 1.24.
Структура каждого файла
Заголовок раздела «Структура каждого файла»1. Базовое API — что это, как объявить, базовые операции2. Под капотом — runtime структуры, ASCII-схемы, как работает изнутри3. Gotchas — 5-17 реальных ловушек (⚠️ Подвох) с примерами4. Производительность — аллокации, escape, оптимизации5. Вопросы с собеса — 15-30 вопросов с развёрнутыми ответами6. Practice — мини-задачки на проверку (со скрытыми ответами)7. Источники — Go blog, Habr, Dave Cheney, runtime sourceНавигация
Заголовок раздела «Навигация»Часть I. Типы и работа с памятью
Заголовок раздела «Часть I. Типы и работа с памятью»| # | Файл | Что внутри | Объём |
|---|---|---|---|
| 01 | 01-types-and-zero-values.md | Все примитивы, zero values, type alias vs definition, iota со всеми финтами, untyped constants, NaN/Inf, comparable | 905 строк |
| 02 | 02-slices.md | SliceHeader, growth pattern, sharing backing array, memory leak через slicing, full-slice expression a[:n:n] | 872 строки |
| 03 | 03-maps.md | hmap/bmap, buckets, tophash, incremental rehash, iteration randomization, concurrent panic | 871 строка |
| 04 | 04-strings-runes-bytes.md | StringHeader, UTF-8 биты, string(int) ловушка, substring memory leak, strings.Builder, unsafe.String/Slice | 909 строк |
Часть II. ООП и ошибки
Заголовок раздела «Часть II. ООП и ошибки»| # | Файл | Что внутри | Объём |
|---|---|---|---|
| 05 | 05-pointers-and-memory.md | Указатели, new vs &T{}, escape analysis, stack vs heap, unsafe.Pointer кратко | 585 строк |
| 06 | 06-functions-closures-defer.md | Closures, Go 1.22 loop scope fix, defer (LIFO, eager args, open-coded), panic/recover | 712 строк |
| 07 | 07-structs-methods.md | Memory layout, padding/alignment, empty struct, method sets, embedding, tags | 702 строки |
| 08 | 08-interfaces.md | iface/eface, itab, ASCII-схемы, nil-interface trap, маленькие интерфейсы (Go-way) | 716 строк |
| 09 | 09-errors-panic-recover.md | error interface, %w wrapping, errors.Is/As/Join, sentinel, custom errors, panic/recover | 723 строки |
Часть III. Concurrency
Заголовок раздела «Часть III. Concurrency»| # | Файл | Что внутри | Объём |
|---|---|---|---|
| 10 | 10-goroutines-scheduler.md | GMP с ASCII-схемой, стек горутины, work stealing, preemption, GOMAXPROCS/automaxprocs, leaks (pprof, goleak) | 691 строка |
| 11 | 11-channels.md | hchan internals (sendq/recvq), nil/closed семантика, select, 10 паттернов, утечки time.After | 861 строка |
| 12 | 12-sync-package.md | Mutex (starvation mode), RWMutex, WaitGroup, Once (+ OnceFunc/Value 1.21), Cond, Pool, atomic 1.19+ | 896 строк |
| 13 | 13-context.md | cancelCtx/timerCtx/valueCtx, WithoutCancel (1.21), Cause (1.20), AfterFunc (1.21), HTTP/SQL/gRPC propagation | 845 строк |
Часть IV. Runtime и stdlib
Заголовок раздела «Часть IV. Runtime и stdlib»| # | Файл | Что внутри | Объём |
|---|---|---|---|
| 14 | 14-gc-and-runtime.md | Tri-color mark and sweep с ASCII-схемой, write barrier, GOGC, GOMEMLIMIT (важно для k8s), sync.Pool | 789 строк |
| 15 | 15-net-http.md | Handler/HandlerFunc/ServeMux, enhanced ServeMux Go 1.22 (методы + /users/{id}), production-таймауты, graceful shutdown | 998 строк |
| 16 | 16-encoding-json.md | Marshal/Unmarshal, tags, Encoder/Decoder для streams и NDJSON, json.Number vs float64, RawMessage, NaN/Inf | 986 строк |
Часть V. Тулинг и тесты
Заголовок раздела «Часть V. Тулинг и тесты»| # | Файл | Что внутри | Объём |
|---|---|---|---|
| 17 | 17-go-modules.md | go.mod директивы, MVS, pseudo-versions, semantic import versioning, workspaces, GOPROXY/GOPRIVATE | 1204 строки |
| 18 | 18-testing.md | Table-driven с loopvar trap (Go 1.22), t.Helper, t.Cleanup, coverage modes, benchmarks, fuzzing, httptest, testing/synctest (1.24+) | 1852 строки |
Топ-темы для собеса (по приоритету)
Заголовок раздела «Топ-темы для собеса (по приоритету)»Если времени мало — сначала разбирай эти:
02-slices.md— sharing/append gotchas спрашивают почти всегда08-interfaces.md— nil interface trap + iface/eface — обязательно11-channels.md— все паттерны concurrency10-goroutines-scheduler.md— GMP, leaks03-maps.md— concurrent access panic, hash randomization14-gc-and-runtime.md— stack vs heap, escape, GC basics13-context.md— propagation, leak без cancel
Топ-gotchas (ловушки, на которых валят даже опытных)
Заголовок раздела «Топ-gotchas (ловушки, на которых валят даже опытных)»02-slices.md— append может мутировать соседа (shared backing array)02-slices.md— memory leak при slicing большого массива (нуженa[:n:n])03-maps.md— concurrent read+write = panic, не race condition03-maps.md— delete не освобождает память04-strings-runes-bytes.md—string(65)→ “A”, не “65”06-functions-closures-defer.md— захват переменной цикла (до Go 1.22 — баг, после — нет)06-functions-closures-defer.md— defer eagerly вычисляет аргументы08-interfaces.md—var err error = (*MyErr)(nil); err != nil→ true!11-channels.md—time.Afterв long-running select течёт13-context.md— забыл вызватьcancel()→ goroutine leak
Связь с другими файлами
Заголовок раздела «Связь с другими файлами»- Сводный
../01-junior.md— обзор всех тем + план изучения по неделям + pet-проекты + ресурсы. Хорошо как стартовая точка. - Эта папка — глубокое погружение в каждую тему отдельно. Хорошо для собеса и понимания “что под капотом”.
../02-middle-1.md— следующий шаг: что добавится на Middle 1 (generics, runtime детально, БД, gRPC).
Метрики
Заголовок раздела «Метрики»- 18 markdown-файлов
- ~16 100 строк
- ~620 КБ материала
- 400+ вопросов с собеса с ответами
- 100+ компилируемых примеров кода
- 15+ ASCII-схем (SliceHeader, hmap, StringHeader, GMP, hchan, iface/eface, tri-color GC и др.)