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

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

#ФайлЧто внутриОбъём
0101-types-and-zero-values.mdВсе примитивы, zero values, type alias vs definition, iota со всеми финтами, untyped constants, NaN/Inf, comparable905 строк
0202-slices.mdSliceHeader, growth pattern, sharing backing array, memory leak через slicing, full-slice expression a[:n:n]872 строки
0303-maps.mdhmap/bmap, buckets, tophash, incremental rehash, iteration randomization, concurrent panic871 строка
0404-strings-runes-bytes.mdStringHeader, UTF-8 биты, string(int) ловушка, substring memory leak, strings.Builder, unsafe.String/Slice909 строк
#ФайлЧто внутриОбъём
0505-pointers-and-memory.mdУказатели, new vs &T{}, escape analysis, stack vs heap, unsafe.Pointer кратко585 строк
0606-functions-closures-defer.mdClosures, Go 1.22 loop scope fix, defer (LIFO, eager args, open-coded), panic/recover712 строк
0707-structs-methods.mdMemory layout, padding/alignment, empty struct, method sets, embedding, tags702 строки
0808-interfaces.mdiface/eface, itab, ASCII-схемы, nil-interface trap, маленькие интерфейсы (Go-way)716 строк
0909-errors-panic-recover.mderror interface, %w wrapping, errors.Is/As/Join, sentinel, custom errors, panic/recover723 строки
#ФайлЧто внутриОбъём
1010-goroutines-scheduler.mdGMP с ASCII-схемой, стек горутины, work stealing, preemption, GOMAXPROCS/automaxprocs, leaks (pprof, goleak)691 строка
1111-channels.mdhchan internals (sendq/recvq), nil/closed семантика, select, 10 паттернов, утечки time.After861 строка
1212-sync-package.mdMutex (starvation mode), RWMutex, WaitGroup, Once (+ OnceFunc/Value 1.21), Cond, Pool, atomic 1.19+896 строк
1313-context.mdcancelCtx/timerCtx/valueCtx, WithoutCancel (1.21), Cause (1.20), AfterFunc (1.21), HTTP/SQL/gRPC propagation845 строк
#ФайлЧто внутриОбъём
1414-gc-and-runtime.mdTri-color mark and sweep с ASCII-схемой, write barrier, GOGC, GOMEMLIMIT (важно для k8s), sync.Pool789 строк
1515-net-http.mdHandler/HandlerFunc/ServeMux, enhanced ServeMux Go 1.22 (методы + /users/{id}), production-таймауты, graceful shutdown998 строк
1616-encoding-json.mdMarshal/Unmarshal, tags, Encoder/Decoder для streams и NDJSON, json.Number vs float64, RawMessage, NaN/Inf986 строк
#ФайлЧто внутриОбъём
1717-go-modules.mdgo.mod директивы, MVS, pseudo-versions, semantic import versioning, workspaces, GOPROXY/GOPRIVATE1204 строки
1818-testing.mdTable-driven с loopvar trap (Go 1.22), t.Helper, t.Cleanup, coverage modes, benchmarks, fuzzing, httptest, testing/synctest (1.24+)1852 строки

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

  1. 02-slices.md — sharing/append gotchas спрашивают почти всегда
  2. 08-interfaces.md — nil interface trap + iface/eface — обязательно
  3. 11-channels.md — все паттерны concurrency
  4. 10-goroutines-scheduler.md — GMP, leaks
  5. 03-maps.md — concurrent access panic, hash randomization
  6. 14-gc-and-runtime.md — stack vs heap, escape, GC basics
  7. 13-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 condition
  • 03-maps.md — delete не освобождает память
  • 04-strings-runes-bytes.mdstring(65) → “A”, не “65”
  • 06-functions-closures-defer.md — захват переменной цикла (до Go 1.22 — баг, после — нет)
  • 06-functions-closures-defer.md — defer eagerly вычисляет аргументы
  • 08-interfaces.mdvar err error = (*MyErr)(nil); err != nil → true!
  • 11-channels.mdtime.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 и др.)