[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-82672":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":9,"languages":9,"totalLinesOfCode":9,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":15,"stars30d":16,"stars90d":14,"forks30d":14,"starsTrendScore":17,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":14,"starSnapshotCount":14,"syncStatus":26,"lastSyncTime":27,"discoverSource":28},82672,"golangroadmap2026","Develp10\u002Fgolangroadmap2026","Develp10","Golang что и где учить в 2026 году на русском языке лучшие бесплатные курсы и материалы",null,156,35,110,1,0,21,46,4,4.67,false,"main",true,[],"2026-06-12 02:04:26","# 🚀 Golang Roadmap 2026 — продвинутый курс на русском\n\n![Go](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-1.23%2B-00ADD8?logo=go&logoColor=white)\n![Level](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLevel-Junior%E2%86%92Staff-success)\n![Duration](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDuration-12%E2%80%9318%20months-blue)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow)\n![Lang](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLang-Russian-red)\n\n> **Полная программа для тех, кто хочет в 2026 году писать на Go в продакшене:** от `fmt.Println` до распределённых систем, observability, AI-агентов и масштабирования на миллионы RPS.\n\n---\n\n## 📌 О курсе\n\nЭто **бесплатный open-source roadmap** на русском языке. Внутри — 19 модулей, каждый со своей теорией, практикой, бесплатными ресурсами и финальным проектом. Программа собрана так, чтобы провести вас от **полного нуля до уровня Senior\u002FStaff Go Engineer** за 12–18 месяцев при темпе 10–15 часов в неделю.\n\n**Главный принцип курса — практика > видосы.** Каждую тему вы закрываете кодом: пишете, ломаете, чините, рефакторите. Любой модуль завершается мини-проектом, который можно положить в портфолио.\n\n### 🎯 Кому подойдёт\n- 🐹 **Новичкам в Go** — даже если до этого писали только на Python\u002FJS\u002FPHP\n- 🛠 **Backend-разработчикам** с другого стека — хотите перейти на Go\n- 📈 **Junior Go-разработчикам** — нужен путь до Middle\u002FSenior\n- 🚀 **Middle-инженерам** — закрыть пробелы в архитектуре, observability, distributed\n- 🤖 **Тем, кто хочет писать AI-инфраструктуру** — модуль 18 специально про это\n\n### 💡 Чем этот roadmap отличается\n1. **Свежий стек 2026** — generics, fuzzing, structured logging `slog`, OpenTelemetry, eBPF, Wasm, GenAI.\n2. **Никаких платных курсов** — только бесплатные ресурсы и официальная документация.\n3. **Проект в каждом модуле** — на выходе у вас 19 готовых пет-проектов + 3 крупных капстоуна.\n4. **Главный источник новостей по Go в Telegram** — [@Golang_google](https:\u002F\u002Ft.me\u002FGolang_google) и [папка каналов про Go](https:\u002F\u002Ft.me\u002Faddlist\u002FMUtJEeJSxeY2YTFi).\n\n---\n\n## 📑 Содержание\n\n- [О курсе](#-о-курсе)\n- [Программа курса](#-программа-курса)\n- [Подробный разбор модулей](#-подробный-разбор-модулей)\n- [Длительность по грейдам](#-длительность-по-грейдам)\n- [Как проходить курс](#-как-проходить-курс)\n- [Подробный план уроков](#-подробный-план-уроков-по-неделям)\n- [Топ бесплатных ресурсов](#-топ-бесплатных-ресурсов)\n- [Главный источник новостей по Go](#-главный-источник-новостей-по-go-telegram)\n- [Красные флаги — типичные ошибки](#%EF%B8%8F-красные-флаги--типичные-ошибки-которые-тормозят-рост)\n- [Лучшие практики Go](#-лучшие-практики-go--разбор-по-темам)\n- [3 железных правила](#-3-железных-правила)\n- [FAQ](#-faq)\n\n---\n\n## 🗺 Программа курса\n\n### Базовая часть — фундамент языка и инструментов\n\n| № | Модуль | Что внутри | Время |\n|---|--------|-----------|-------|\n| 00 | **Fundamentals** | Синтаксис, типы, управляющие конструкции, slices, maps, структуры, методы, интерфейсы, ошибки | 3–4 нед |\n| 01 | **Tooling & Modules** | `go mod`, `go work`, линтеры, форматтеры, Makefile, Task, CI | 1 нед |\n| 02 | **Concurrency** | Горутины, каналы, `select`, `sync`, `context`, race detector, паттерны | 3–4 нед |\n| 03 | **Standard Library** | `io`, `os`, `net\u002Fhttp`, `encoding\u002Fjson`, `time`, `bufio`, `errors`, `slog` | 2–3 нед |\n| 04 | **Testing** | Unit, table-driven, fuzzing, benchmarking, моки, integration, testcontainers | 2 нед |\n| 05 | **Web & API** | net\u002Fhttp, chi, gin, echo, REST, OpenAPI, валидация, middleware | 3 нед |\n| 06 | **Databases** | SQL (PostgreSQL), pgx, sqlc, миграции (goose, atlas), Redis, транзакции | 3 нед |\n| 07 | **gRPC & Protobuf** | Protobuf, кодогенерация, streaming, gRPC-Gateway, buf, gRPC reflection | 2 нед |\n| 08 | **Architecture** | Clean \u002F Hexagonal \u002F Vertical Slice, DDD-lite, DI без магии (wire\u002Ffx) | 3 нед |\n\n### Продвинутая часть — production-ready инженерия\n\n| № | Модуль | Что внутри | Время |\n|---|--------|-----------|-------|\n| 09 | **Observability** | OpenTelemetry, Prometheus, Grafana, slog, traces, metrics, logs, profiling (pprof) | 2 нед |\n| 10 | **Performance** | pprof, escape analysis, GC, бенчмарки, lock-free, sync.Pool, оптимизации памяти | 3 нед |\n| 11 | **Security** | OWASP Top 10 для Go, JWT, OAuth2, TLS, secrets management, supply chain (govulncheck) | 2 нед |\n| 12 | **Cloud & DevOps** | Docker, Kubernetes, Helm, ArgoCD, IaC (Terraform), GitOps, observability в k8s | 4 нед |\n| 13 | **Messaging** | Kafka, NATS, RabbitMQ, outbox pattern, idempotency, sagas | 3 нед |\n| 14 | **Distributed Systems** | CAP, consensus (Raft), event sourcing, CQRS, distributed locks, leader election | 4 нед |\n| 15 | **Microservices** | service mesh (Istio\u002FLinkerd), API gateway, circuit breaker, bulkhead, retries | 3 нед |\n| 16 | **System Design** | Проектирование Twitter\u002FUber\u002FWhatsApp на Go, capacity planning, шардирование, кэширование | 4 нед |\n| 17 | **Advanced Topics** | eBPF, Wasm (`tinygo`), unsafe, plugin, cgo, FFI, Go internals (runtime, scheduler) | 3 нед |\n| 18 | **AI & Data Engineering** | LLM-агенты на Go, vector DB, RAG, Ollama, langchaingo, потоковая обработка | 3 нед |\n\n---\n\n## 📚 Подробный разбор модулей\n\n### 00. Fundamentals — фундамент языка\n**Что изучаем:** `go run`, `go build`, переменные, типы, zero values, control flow, массивы vs срезы, maps, структуры, методы и receiver-ы, интерфейсы (implicit), ошибки и `errors.Is\u002FAs`, `defer`, `panic`\u002F`recover`, generics (1.18+), iterators (1.23+).\n**Бесплатные ресурсы:**\n- [A Tour of Go](https:\u002F\u002Fgo.dev\u002Ftour\u002F) — официальный интерактив\n- [Effective Go](https:\u002F\u002Fgo.dev\u002Fdoc\u002Feffective_go) — обязательно\n- [Go by Example](https:\u002F\u002Fgobyexample.com\u002F) — рецепты на каждый день\n- [Учебник Ushakov](https:\u002F\u002Fushakov-school.ru\u002Fgolang) (бесплатный)\n- YouTube: [Nikolay Tuzov — Golang с нуля](https:\u002F\u002Fwww.youtube.com\u002F@nikolay_tuzov)\n- Книга: [«The Go Programming Language»](https:\u002F\u002Fwww.gopl.io\u002F) (Donovan, Kernighan) — главы 1–7\n**Проект модуля:** CLI-утилита `gocount` — считает строки\u002Fслова\u002Fбайты в файлах (аналог `wc`).\n\n### 01. Tooling & Modules — экосистема\n**Что изучаем:** `go mod init\u002Ftidy\u002Fwhy\u002Fgraph`, `go work`, `replace`, vendoring, версионирование (semver), `golangci-lint`, `gofumpt`, `goimports`, `Taskfile.yml`, `Makefile`, pre-commit hooks, GitHub Actions для Go.\n**Бесплатные ресурсы:**\n- [Go Modules Reference](https:\u002F\u002Fgo.dev\u002Fref\u002Fmod)\n- [golangci-lint docs](https:\u002F\u002Fgolangci-lint.run\u002F)\n- [Task — современный Make](https:\u002F\u002Ftaskfile.dev\u002F)\n- Статья: [Go Workspaces by Robert Griesemer](https:\u002F\u002Fgo.dev\u002Fblog\u002Fget-familiar-with-workspaces)\n**Проект модуля:** монорепо с 2 модулями, единый `Taskfile`, CI на GitHub Actions с линтером и тестами.\n\n### 02. Concurrency — то, ради чего идут в Go\n**Что изучаем:** горутины, `go`-statement, каналы (buffered\u002Funbuffered), `select`, `for range ch`, `close`, `sync.Mutex\u002FRWMutex`, `sync.WaitGroup`, `sync.Once`, `sync.Pool`, `atomic`, `context.Context` (cancel\u002Ftimeout\u002Fvalue), race detector (`go run -race`), паттерны: worker pool, fan-in\u002Ffan-out, pipeline, semaphore, errgroup.\n**Бесплатные ресурсы:**\n- [Go Concurrency Patterns (Pike)](https:\u002F\u002Fgo.dev\u002Fblog\u002Fpipelines)\n- Книга: [«Concurrency in Go» Katherine Cox-Buday](https:\u002F\u002Fkatherine.cox-buday.com\u002Fconcurrency-in-go\u002F) (главы в открытом доступе)\n- [Курс Concurrency in Go — Ardan Labs](https:\u002F\u002Fgithub.com\u002Fardanlabs\u002Fgotraining) (open-source)\n- YouTube: [Бакалавр Computer Science — конкурентность](https:\u002F\u002Fwww.youtube.com\u002F@bbc_ru)\n**Проект модуля:** многопоточный краулер сайтов с rate limiting, retries и graceful shutdown.\n\n### 03. Standard Library — золото стандартной библиотеки\n**Что изучаем:** `io.Reader\u002FWriter` идиомы, `bufio`, `os` (env, signals, fs), `net\u002Fhttp` сервер и клиент, `encoding\u002Fjson` + кастомные `MarshalJSON`, `encoding\u002Fxml`, `time` (часовые пояса, monotonic), `errors` (wrap, unwrap), `log\u002Fslog` (1.21+) — structured logging.\n**Бесплатные ресурсы:**\n- [pkg.go.dev\u002Fstd](https:\u002F\u002Fpkg.go.dev\u002Fstd) — официальная документация\n- [Go Blog — slog tutorial](https:\u002F\u002Fgo.dev\u002Fblog\u002Fslog)\n- Статьи: [Dave Cheney — practical Go](https:\u002F\u002Fdave.cheney.net\u002Fpractical-go)\n**Проект модуля:** HTTP-сервис-агрегатор RSS с structured logging через `slog`.\n\n### 04. Testing — без тестов в прод не пускаем\n**Что изучаем:** `testing.T`, table-driven tests, subtests, `t.Parallel()`, fuzzing (`testing.F`), benchmarking (`testing.B`), coverage, golden files, моки (gomock, mockery, testify\u002Fmock), `httptest`, `iotest`, integration через [testcontainers-go](https:\u002F\u002Fgolang.testcontainers.org\u002F).\n**Бесплатные ресурсы:**\n- [Go Testing — официальный туториал](https:\u002F\u002Fgo.dev\u002Fdoc\u002Ftutorial\u002Fadd-a-test)\n- [Learn Go with Tests](https:\u002F\u002Fquii.gitbook.io\u002Flearn-go-with-tests\u002F) — лучший бесплатный курс TDD на Go\n- [Go Fuzzing](https:\u002F\u002Fgo.dev\u002Fsecurity\u002Ffuzz\u002F)\n**Проект модуля:** библиотека для парсинга промокодов с 95%+ покрытием, fuzz-тестами и benchmark-ами.\n\n### 05. Web & API — REST и HTTP-сервисы\n**Что изучаем:** `net\u002Fhttp` + ServeMux (1.22+), роутеры [chi](https:\u002F\u002Fgithub.com\u002Fgo-chi\u002Fchi), [gin](https:\u002F\u002Fgin-gonic.com\u002F), [echo](https:\u002F\u002Fecho.labstack.com\u002F), middleware (auth, recover, rate limit, CORS), валидация ([go-playground\u002Fvalidator](https:\u002F\u002Fgithub.com\u002Fgo-playground\u002Fvalidator)), OpenAPI 3 ([oapi-codegen](https:\u002F\u002Fgithub.com\u002Foapi-codegen\u002Foapi-codegen)), `huma`, `fiber`, graceful shutdown, server-timing, SSE и WebSocket.\n**Бесплатные ресурсы:**\n- [Alex Edwards — Let's Go (book, бесплатные главы)](https:\u002F\u002Flets-go.alexedwards.net\u002Fsample\u002F)\n- [chi docs](https:\u002F\u002Fgo-chi.io\u002F)\n- [OpenAPI Generator for Go](https:\u002F\u002Fopenapi-generator.tech\u002Fdocs\u002Fgenerators\u002Fgo\u002F)\n**Проект модуля:** REST API `linkshrt` (аналог bit.ly) с auth, rate-limit, OpenAPI и Docker.\n\n### 06. Databases — данные навсегда\n**Что изучаем:** `database\u002Fsql`, [pgx](https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx), [sqlc](https:\u002F\u002Fsqlc.dev\u002F), [squirrel](https:\u002F\u002Fgithub.com\u002FMasterminds\u002Fsquirrel), миграции ([goose](https:\u002F\u002Fgithub.com\u002Fpressly\u002Fgoose), [atlas](https:\u002F\u002Fatlasgo.io\u002F)), индексы, `EXPLAIN ANALYZE`, транзакции и уровни изоляции, connection pool, [go-redis](https:\u002F\u002Fgithub.com\u002Fredis\u002Fgo-redis), кэширование (cache-aside, write-through), [ent](https:\u002F\u002Fentgo.io\u002F) и [bun](https:\u002F\u002Fbun.uptrace.dev\u002F).\n**Бесплатные ресурсы:**\n- [Use the Database Slow Query Log](https:\u002F\u002Fwiki.postgresql.org\u002Fwiki\u002FLogging_Difficult_Queries)\n- [pgx tutorial](https:\u002F\u002Fgithub.com\u002Fjackc\u002Fpgx\u002Fwiki)\n- [PostgreSQL для разработчика — Postgres Pro (RU)](https:\u002F\u002Fpostgrespro.ru\u002Feducation\u002Fbooks)\n**Проект модуля:** сервис подписок с PostgreSQL (sqlc) + Redis (idempotency keys) + миграциями.\n\n### 07. gRPC & Protobuf — межсервисные коммуникации\n**Что изучаем:** protobuf 3, `buf` CLI, кодогенерация (`protoc-gen-go`, `protoc-gen-go-grpc`), unary\u002Fserver-stream\u002Fclient-stream\u002Fbidi-stream, deadlines, interceptors, [grpc-gateway](https:\u002F\u002Fgrpc-ecosystem.github.io\u002Fgrpc-gateway\u002F), reflection, [connect-go](https:\u002F\u002Fconnectrpc.com\u002F), [twirp](https:\u002F\u002Ftwitchtv.github.io\u002Ftwirp\u002F).\n**Бесплатные ресурсы:**\n- [gRPC Basics — официальный туториал](https:\u002F\u002Fgrpc.io\u002Fdocs\u002Flanguages\u002Fgo\u002Fbasics\u002F)\n- [Buf docs](https:\u002F\u002Fbuf.build\u002Fdocs\u002Fintroduction)\n- YouTube: [gRPC + Go — TechSchool](https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLy_6D98if3ULEtXtNSY_2qN21VCKgoQAE)\n**Проект модуля:** микросервис `user-svc` + `order-svc` через gRPC streaming, REST-фасад через gRPC-Gateway.\n\n### 08. Architecture — пишем код, который не стыдно\n**Что изучаем:** Clean Architecture, Hexagonal (ports & adapters), Vertical Slice, DDD-lite (entity, value object, repository, aggregate), DI без магии ([wire](https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fwire), [fx](https:\u002F\u002Fgithub.com\u002Fuber-go\u002Ffx)), функциональные опции, error wrapping стратегии, layered конфиг ([viper](https:\u002F\u002Fgithub.com\u002Fspf13\u002Fviper), [koanf](https:\u002F\u002Fgithub.com\u002Fknadh\u002Fkoanf)).\n**Бесплатные ресурсы:**\n- [go-clean-template — Evrone](https:\u002F\u002Fgithub.com\u002Fevrone\u002Fgo-clean-template)\n- [Standard Go Project Layout](https:\u002F\u002Fgithub.com\u002Fgolang-standards\u002Fproject-layout) (с оговорками)\n- Статьи: [Three Dots Labs — Wild Workouts](https:\u002F\u002Fthreedots.tech\u002Fpost\u002Fintroducing-clean-architecture\u002F)\n**Проект модуля:** рефакторинг проекта модуля 05 в чистую архитектуру + DI через wire.\n\n### 09. Observability — без неё в проде слепой\n**Что изучаем:** [OpenTelemetry для Go](https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fgo\u002F), structured logging (`slog` + correlation id), traces (Jaeger\u002FTempo), metrics (Prometheus), `pprof` через HTTP, `expvar`, dashboards в Grafana, алёрты в Alertmanager, log levels стратегия.\n**Бесплатные ресурсы:**\n- [OpenTelemetry Go SDK docs](https:\u002F\u002Fopentelemetry.io\u002Fdocs\u002Flanguages\u002Fgo\u002Fgetting-started\u002F)\n- [Prometheus client_golang examples](https:\u002F\u002Fgithub.com\u002Fprometheus\u002Fclient_golang\u002Ftree\u002Fmain\u002Fexamples)\n- [Grafana University (бесплатно)](https:\u002F\u002Fgrafana.com\u002Fabout\u002Fteam\u002Fgrafanauniversity\u002F)\n**Проект модуля:** добавить полную observability к сервисам из 07: traces + metrics + structured logs + Grafana дашборд.\n\n### 10. Performance — Go быстрый, но не сам собой\n**Что изучаем:** `go test -bench`, `benchstat`, `pprof` (cpu, mem, goroutine, mutex, block), escape analysis (`-gcflags='-m'`), GOGC и GOMEMLIMIT (1.19+), `sync.Pool`, lock-free структуры, false sharing, prealloc slice\u002Fmap, string interning, [PGO](https:\u002F\u002Fgo.dev\u002Fdoc\u002Fpgo) (Profile-Guided Optimization).\n**Бесплатные ресурсы:**\n- [High Performance Go Workshop — Dave Cheney](https:\u002F\u002Fdave.cheney.net\u002Fhigh-performance-go-workshop\u002Fdotgo-paris.html)\n- [Go Performance Tuning — Bartosz Mika](https:\u002F\u002Fgithub.com\u002Fdgryski\u002Fgo-perfbook)\n- [pprof tutorial — Julia Evans](https:\u002F\u002Fjvns.ca\u002Fblog\u002F2017\u002F09\u002F24\u002Fprofiling-go-with-pprof\u002F)\n**Проект модуля:** оптимизировать REST API из модуля 05 — поднять RPS в 5–10 раз через профилирование.\n\n### 11. Security — безопасность в Go\n**Что изучаем:** OWASP Top 10 в контексте Go, JWT (RS256 vs HS256), OAuth2 \u002F OIDC, TLS (mTLS), `crypto\u002F*`, secrets management (Vault, SOPS), supply chain attacks, [govulncheck](https:\u002F\u002Fgo.dev\u002Fblog\u002Fgovulncheck), [gosec](https:\u002F\u002Fgithub.com\u002Fsecurego\u002Fgosec), CSRF, SQL injection, SSRF, RCE через unsafe deserialization.\n**Бесплатные ресурсы:**\n- [OWASP Go Secure Coding Practices](https:\u002F\u002Fgithub.com\u002FOWASP\u002FGo-SCP)\n- [Go Security Best Practices — Snyk](https:\u002F\u002Fsnyk.io\u002Flearn\u002Fgo-security\u002F)\n- [govulncheck blog post](https:\u002F\u002Fgo.dev\u002Fblog\u002Fgovulncheck)\n**Проект модуля:** аудит безопасности проекта 05\u002F08, внедрение JWT + mTLS между сервисами + govulncheck в CI.\n\n### 12. Cloud & DevOps — куда деплоиться\n**Что изучаем:** multi-stage `Dockerfile` (distroless), Docker Compose, Kubernetes (Pod\u002FDeployment\u002FService\u002FIngress\u002FConfigMap\u002FSecret), Helm charts, Kustomize, ArgoCD, Terraform для облака (AWS\u002FGCP\u002FYandex), GitOps workflow, kubectl мастерство.\n**Бесплатные ресурсы:**\n- [Kubernetes Up & Running — free chapters](https:\u002F\u002Fwww.oreilly.com\u002Flibrary\u002Fview\u002Fkubernetes-up-and\u002F9781098110192\u002F)\n- [Learn Kubernetes the Hard Way (Kelsey Hightower)](https:\u002F\u002Fgithub.com\u002Fkelseyhightower\u002Fkubernetes-the-hard-way)\n- [Helm docs](https:\u002F\u002Fhelm.sh\u002Fdocs\u002F)\n- YouTube: [TechWorld with Nana — Kubernetes](https:\u002F\u002Fwww.youtube.com\u002F@TechWorldwithNana)\n**Проект модуля:** деплой 3-сервисов из модуля 09 в Kubernetes (kind\u002Fminikube) + Helm + ArgoCD.\n\n### 13. Messaging — асинхронные коммуникации\n**Что изучаем:** [Kafka](https:\u002F\u002Fgithub.com\u002Ftwmb\u002Ffranz-go) (партиции, оффсеты, consumer groups, exactly-once), [NATS](https:\u002F\u002Fnats.io\u002F) (Core, JetStream, KV), RabbitMQ, outbox pattern, idempotency keys, retries с backoff, dead letter queue, sagas (orchestration vs choreography), event-driven архитектура.\n**Бесплатные ресурсы:**\n- [Kafka: The Definitive Guide — free O'Reilly](https:\u002F\u002Fwww.confluent.io\u002Fresources\u002Fkafka-the-definitive-guide-v2\u002F)\n- [NATS by Example](https:\u002F\u002Fnatsbyexample.com\u002F)\n- Watermill — [фреймворк для event-driven Go](https:\u002F\u002Fwatermill.io\u002F)\n**Проект модуля:** order-saga через NATS JetStream + outbox table в PostgreSQL.\n\n### 14. Distributed Systems — теория и боль\n**Что изучаем:** CAP, PACELC, consistency models (linearizable, sequential, eventual), Raft \u002F Paxos (на уровне понимания), distributed locks ([etcd](https:\u002F\u002Fetcd.io\u002F), Redis Redlock), leader election, vector clocks, event sourcing + CQRS, Two-Generals, Byzantine fault tolerance (basics).\n**Бесплатные ресурсы:**\n- Книга [«Designing Data-Intensive Applications»](https:\u002F\u002Fdataintensive.net\u002F) (Kleppmann) — обязательно\n- [MIT 6.824 Distributed Systems](https:\u002F\u002Fpdos.csail.mit.edu\u002F6.824\u002F) — лекции бесплатно\n- [The Raft paper](https:\u002F\u002Fraft.github.io\u002Fraft.pdf) + [interactive visualisation](https:\u002F\u002Fraft.github.io\u002F)\n**Проект модуля:** свой mini key-value store с Raft (на базе [hashicorp\u002Fraft](https:\u002F\u002Fgithub.com\u002Fhashicorp\u002Fraft)) на 3 нодах.\n\n### 15. Microservices — оркестрация и устойчивость\n**Что изучаем:** service mesh (Istio, Linkerd), API Gateway (KrakenD, Kong), circuit breaker ([sony\u002Fgobreaker](https:\u002F\u002Fgithub.com\u002Fsony\u002Fgobreaker)), retries, timeouts, bulkhead, [resilience-go](https:\u002F\u002Fgithub.com\u002Fslok\u002Fgoresilience), feature flags (Unleash), blue-green \u002F canary deploys, contract testing (Pact).\n**Бесплатные ресурсы:**\n- [microservices.io patterns — Chris Richardson](https:\u002F\u002Fmicroservices.io\u002Fpatterns\u002F)\n- [Istio docs](https:\u002F\u002Fistio.io\u002Flatest\u002Fdocs\u002F)\n- [Release It! — Michael Nygard](https:\u002F\u002Fpragprog.com\u002Ftitles\u002Fmnee2\u002Frelease-it-second-edition\u002F) (главы в открытом доступе)\n**Проект модуля:** добавить circuit breaker, retries, timeouts в проект 09; canary deploy через ArgoCD.\n\n### 16. System Design — как собеседуют на Senior\n**Что изучаем:** capacity planning (back-of-envelope), CDN, шардирование, репликация (sync vs async), кэширование (LRU, LFU, TinyLFU), очереди, consistent hashing, gossip protocols, geo-replication, multi-tenancy, мульти-регион, RTO\u002FRPO.\n**Бесплатные ресурсы:**\n- [System Design Primer](https:\u002F\u002Fgithub.com\u002Fdonnemartin\u002Fsystem-design-primer) — must-have\n- [ByteByteGo (бесплатные посты)](https:\u002F\u002Fblog.bytebytego.com\u002F)\n- YouTube: [Hussein Nasser](https:\u002F\u002Fwww.youtube.com\u002F@hnasser)\n**Проект модуля:** письменный системный дизайн Twitter-clone на Go (можно как ADR-документ в репо).\n\n### 17. Advanced Topics — внутрь Go\n**Что изучаем:** Go runtime (GMP scheduler), garbage collector (tri-color, write barriers), `unsafe` (когда оправдано), `cgo` (и почему лучше без него), [tinygo](https:\u002F\u002Ftinygo.org\u002F) для Wasm и embedded, eBPF на Go ([cilium\u002Febpf](https:\u002F\u002Fgithub.com\u002Fcilium\u002Febpf)), `plugin`, [Wazero](https:\u002F\u002Fwazero.io\u002F) для запуска Wasm на сервере.\n**Бесплатные ресурсы:**\n- [Go internals — Bartosz Mika](https:\u002F\u002Fgithub.com\u002Fteh-cmc\u002Fgo-internals)\n- [Go scheduler — Ardan Labs deep dive](https:\u002F\u002Fwww.ardanlabs.com\u002Fblog\u002F2018\u002F08\u002Fscheduling-in-go-part1.html)\n- [eBPF Tutorial — Cilium](https:\u002F\u002Fdocs.cilium.io\u002Fen\u002Fstable\u002Fbpf\u002F)\n**Проект модуля:** eBPF-программа на Go, считающая TCP-соединения по PID.\n\n### 18. AI & Data Engineering — Go в 2026 ещё и про AI\n**Что изучаем:** [Ollama](https:\u002F\u002Follama.com\u002F) клиент на Go, [langchaingo](https:\u002F\u002Fgithub.com\u002Ftmc\u002Flangchaingo), RAG (Retrieval Augmented Generation), vector databases (pgvector, Qdrant, Weaviate), streaming-обработка ([benthos](https:\u002F\u002Fwww.benthos.dev\u002F)), embeddings, function calling, MCP-серверы на Go.\n**Бесплатные ресурсы:**\n- [langchaingo examples](https:\u002F\u002Fgithub.com\u002Ftmc\u002Flangchaingo\u002Ftree\u002Fmain\u002Fexamples)\n- [Building LLM apps with Go — Eli Bendersky](https:\u002F\u002Feli.thegreenplace.net\u002Ftag\u002Fgolang)\n- [Qdrant Go SDK quickstart](https:\u002F\u002Fqdrant.tech\u002Fdocumentation\u002Fquick-start\u002F)\n**Проект модуля:** RAG-чат-бот по документации Go (pgvector + Ollama + langchaingo + gRPC API).\n\n---\n\n## ⏱ Длительность по грейдам\n\n| Цель | Срок | Часов в неделю | Что закрываем |\n|------|------|----------------|---------------|\n| 🟢 **Junior Go** | 3–4 мес | 10–15 | Модули 00–06 |\n| 🟡 **Middle Go** | 7–9 мес | 12–18 | Модули 00–12 |\n| 🟠 **Senior Go** | 12–14 мес | 15–20 | Модули 00–16 |\n| 🔴 **Staff \u002F Principal** | 16–18 мес | 20+ | Все 19 модулей + участие в open-source |\n\n> Это не дедлайны, а ориентиры. Кто-то проходит за 8 месяцев, кто-то за 2 года — оба варианта норма.\n\n---\n\n## 🧭 Как проходить курс\n\n1. **Установите Go 1.23+** с [go.dev\u002Fdl](https:\u002F\u002Fgo.dev\u002Fdl\u002F) и настройте `gopls` в редакторе.\n2. **Клонируйте репозиторий** — внутри `\u002Fcourse` лежат markdown-файлы по каждому модулю.\n3. **Идите по порядку** — модули зависят друг от друга. Перепрыгивать опасно.\n4. **Не смотрите видосы пассивно** — открыли видео → пишете тот же код параллельно.\n5. **Делайте проект каждого модуля** — без проекта модуль не считается пройденным.\n6. **Ведите блог-конспект** — хоть в `\u002Fnotes` репозитория. Объяснил себе → понял.\n7. **Подпишитесь на [@Golang_google](https:\u002F\u002Ft.me\u002FGolang_google)** — там разбирают свежие фичи Go и вакансии.\n\n### 📆 Рекомендованный ритм недели\n\n| День | Активность | Время |\n|------|-----------|-------|\n| Пн | Теория модуля (книга\u002Fстатья) | 1.5–2 ч |\n| Вт | Практика: примеры из туториала | 2 ч |\n| Ср | Теория + видос | 1.5 ч |\n| Чт | Своя имплементация | 2 ч |\n| Пт | Тесты + рефакторинг | 1.5 ч |\n| Сб | Работа над проектом модуля | 3–4 ч |\n| Вс | Чтение исходников, ревью, отдых | 1 ч |\n\n---\n\n## 🧪 Подробный план уроков по неделям\n\nЗдесь — расширенный план первого квартала (модули 00–04). Полные планы остальных модулей лежат в `\u002Fcourse\u002F\u003CNN>-*.md`.\n\n### Модуль 00 — Fundamentals (3–4 недели)\n\n#### Неделя 1 — синтаксис и типы\n- **Урок 1.1** «Hello, World правильно». Установка Go, GOPATH vs go modules, `go run`, `go build`, кросс-компиляция. Практика: написать 5 версий hello — с аргументами, env-переменными, stdin, JSON-выводом, exit codes.\n- **Урок 1.2** Скалярные типы и литералы. Числа (int vs int64), string vs []byte, rune, typed\u002Funtyped константы, `iota`. Практика: калькулятор BMI с обработкой некорректного ввода.\n- **Урок 1.3** Управление потоком. `if`, `for` (3 формы), `switch` (type switch), `goto` (зачем?). Практика: FizzBuzz, реализованный 4 разными способами; решение задачек с [Exercism Go track](https:\u002F\u002Fexercism.org\u002Ftracks\u002Fgo).\n- **Урок 1.4** Функции, multiple return, named returns, variadic, замыкания. Практика: набор функций для статистики ([]float64 → mean, median, mode, stdev).\n\n#### Неделя 2 — коллекции и память\n- **Урок 2.1** Массивы vs слайсы: длина, capacity, underlying array, `append` подводные камни, копирование. Практика: реализовать свой `Stack` и `Queue` на слайсах с тестами.\n- **Урок 2.2** Maps: zero value, iteration order, `delete`, конкурентный доступ. Практика: word-frequency counter, читающий большой текст и выдающий топ-N слов.\n- **Урок 2.3** Strings, runes, UTF-8, `strings.Builder`, `bytes.Buffer`. Практика: транслитерация русский ↔ латиница.\n- **Урок 2.4** Pointers, value vs pointer receivers, когда копирование вредит. Практика: бенчмарк big-struct value vs pointer.\n\n#### Неделя 3 — структуры, методы, интерфейсы\n- **Урок 3.1** `struct`, теги (json, db, validate), embedding (composition over inheritance). Практика: модель `Order` с JSON-сериализацией и валидацией.\n- **Урок 3.2** Методы, value vs pointer receivers, method sets. Практика: тип `Money` с безопасной арифметикой (без float).\n- **Урок 3.3** Интерфейсы — implicit, пустой интерфейс, type assertion, type switch, `io.Reader\u002FWriter` идиома. Практика: написать свой `io.Reader`, который сжимает строку в gzip on-the-fly.\n- **Урок 3.4** Errors как values: `errors.New`, `fmt.Errorf(\"%w\", ...)`, `errors.Is\u002FAs`, sentinel vs typed vs opaque ошибки. Практика: библиотека парсинга конфига с собственными типами ошибок.\n\n#### Неделя 4 — продвинутое и проект\n- **Урок 4.1** `defer`, `panic`, `recover` — паттерны и анти-паттерны.\n- **Урок 4.2** Generics (1.18+): type parameters, constraints, `comparable`, `any`. Практика: написать generic `Filter`, `Map`, `Reduce`.\n- **Урок 4.3** Iterators (1.23+) — `range over func`. Практика: переписать word-counter из 2.2 как iterator.\n- **Финальный проект:** CLI-утилита `gocount` — flags, чтение stdin\u002Fфайлов, glob, бенчмарк против системного `wc`. Покрытие тестами ≥ 80%.\n\n### Модуль 01 — Tooling & Modules (1 неделя)\n- **Урок 1** `go mod` под микроскопом: версии, replace, retract, minimum version selection.\n- **Урок 2** `go work` и монорепо.\n- **Урок 3** Линтеры: `golangci-lint` конфиг для prod-проекта, `gofumpt`, `gci`, `betteralign`.\n- **Урок 4** Taskfile.yml vs Makefile; pre-commit hooks (lefthook).\n- **Урок 5** GitHub Actions workflow для Go (matrix Go-версий, cache, codecov).\n- **Финальный проект:** монорепо-шаблон со всем настроенным CI и pre-commit.\n\n### Модуль 02 — Concurrency (3–4 недели)\n\n#### Неделя 1 — основы\n- **Урок 1** Горутины: стек, цена создания, GMP-модель в общих чертах.\n- **Урок 2** Каналы: buffered vs unbuffered, направление, close, range, nil-channel паттерн.\n- **Урок 3** `select` и таймауты, default-ветка, идиома `done`-channel.\n- **Урок 4** Race detector в действии: пишем код с гонкой, ловим её `-race`.\n\n#### Неделя 2 — sync и context\n- **Урок 5** `sync.Mutex\u002FRWMutex`: когда RW даёт выигрыш, deadlock-стратегии.\n- **Урок 6** `sync.WaitGroup`, `sync.Once`, `sync.Pool` (когда вредит).\n- **Урок 7** `atomic` и lock-free счётчики; happens-before.\n- **Урок 8** `context.Context` — cancel, timeout, deadline, value (и почему value лучше избегать).\n\n#### Неделя 3 — паттерны\n- **Урок 9** Worker pool с back-pressure.\n- **Урок 10** Pipeline + fan-in\u002Ffan-out.\n- **Урок 11** errgroup, semaphore, singleflight.\n- **Урок 12** Graceful shutdown сервиса: signal → ctx.Done → wait → exit.\n\n#### Неделя 4 — проект\n- **Финальный проект:** многопоточный web-crawler с rate limit на хост, depth limit, retries (exponential backoff), persisting в BoltDB, graceful shutdown по `SIGTERM`.\n\n### Модуль 03 — Standard Library (2–3 недели)\n- **Урок 1** `io.Reader\u002FWriter` композиция: `TeeReader`, `MultiReader`, `LimitReader`.\n- **Урок 2** `bufio` правильно: Scanner-ловушки на длинных строках.\n- **Урок 3** `os`: env, signals, process management, file system.\n- **Урок 4** `net\u002Fhttp` server: ServeMux 1.22+, middleware-цепочки, server timeouts.\n- **Урок 5** `net\u002Fhttp` client: transport, retries, connection pooling, timeouts ВЕЗДЕ.\n- **Урок 6** `encoding\u002Fjson` глубже: `json.Decoder` стримом, custom Marshal\u002FUnmarshal, `omitempty`-нюансы.\n- **Урок 7** `time` без боли: zones, monotonic clock, mock-абстракции для тестов.\n- **Урок 8** `log\u002Fslog` (1.21+) — handlers, attributes, source, context.\n- **Финальный проект:** RSS-агрегатор с structured logging, retries, graceful shutdown.\n\n### Модуль 04 — Testing (2 недели)\n- **Урок 1** `testing.T` + subtests + table-driven (с `t.Run`).\n- **Урок 2** `t.Parallel()`, `t.Cleanup()`, helper functions.\n- **Урок 3** Моки: testify\u002Fmock, gomock, mockery — pros\u002Fcons.\n- **Урок 4** `httptest.Server` + `httptest.ResponseRecorder`.\n- **Урок 5** Integration tests через [testcontainers-go](https:\u002F\u002Fgolang.testcontainers.org\u002F) (Postgres, Redis в Docker).\n- **Урок 6** Fuzzing (`testing.F`) — пишем и находим реальный баг.\n- **Урок 7** Benchmarks + `benchstat` для сравнения.\n- **Финальный проект:** библиотека парсинга промокодов с 95% coverage, fuzz-найденными багами и benchmark-сравнением 2 реализаций.\n\n> Полные планы по модулям 05–18 — в `\u002Fcourse\u002F05-web.md` ... `\u002Fcourse\u002F18-ai-data.md`. Каждый файл уже содержит конкретные уроки, ссылки и проектные задания.\n\n---\n\n## 🌟 Топ бесплатных ресурсов\n\n### Книги\n- **A Tour of Go** — [go.dev\u002Ftour](https:\u002F\u002Fgo.dev\u002Ftour)\n- **Effective Go** — [go.dev\u002Fdoc\u002Feffective_go](https:\u002F\u002Fgo.dev\u002Fdoc\u002Feffective_go)\n- **Learn Go with Tests** — [quii.gitbook.io](https:\u002F\u002Fquii.gitbook.io\u002Flearn-go-with-tests\u002F)\n- **The Go Programming Language** (главы доступны, образцы — gopl.io)\n- **Designing Data-Intensive Applications** — Kleppmann (для модулей 13–16)\n- **Concurrency in Go** — Cox-Buday (главы 1–3 в открытом доступе)\n\n### Видеокурсы и YouTube\n- [Nikolay Tuzov — Golang с нуля](https:\u002F\u002Fwww.youtube.com\u002F@nikolay_tuzov) (RU)\n- [Ardan Labs Ultimate Go](https:\u002F\u002Fgithub.com\u002Fardanlabs\u002Fgotraining) (EN, open-source)\n- [TechSchool — Go + gRPC](https:\u002F\u002Fwww.youtube.com\u002F@TechSchoolGuru)\n- [JustForFunc — Francesc Campoy](https:\u002F\u002Fwww.youtube.com\u002Fc\u002FJustForFunc) (EN)\n- [Anthony GG — Go projects](https:\u002F\u002Fwww.youtube.com\u002F@anthonygg_) (EN)\n\n### Практика и задачи\n- [Exercism Go track](https:\u002F\u002Fexercism.org\u002Ftracks\u002Fgo) — задачки с ментором\n- [Gophercises](https:\u002F\u002Fgophercises.com\u002F) — 20 пет-проектов\n- [Go by Example](https:\u002F\u002Fgobyexample.com\u002F) — рецепты\n- [Project Euler на Go](https:\u002F\u002Fprojecteuler.net\u002F) — алгоритмы\n- [Advent of Code](https:\u002F\u002Fadventofcode.com\u002F) на Go\n\n### Блоги и newsletters\n- [Dave Cheney — practical Go](https:\u002F\u002Fdave.cheney.net\u002F)\n- [Eli Bendersky](https:\u002F\u002Feli.thegreenplace.net\u002Ftag\u002Fgolang)\n- [Three Dots Labs](https:\u002F\u002Fthreedots.tech\u002F)\n- [Go Weekly](https:\u002F\u002Fgolangweekly.com\u002F)\n- Telegram: [@Golang_google](https:\u002F\u002Ft.me\u002FGolang_google) — главный русскоязычный канал\n\n### Документация и спецификации\n- [pkg.go.dev\u002Fstd](https:\u002F\u002Fpkg.go.dev\u002Fstd) — стандартная библиотека\n- [Go Language Specification](https:\u002F\u002Fgo.dev\u002Fref\u002Fspec) — обязательно к прочтению на уровне Middle+\n- [Go Memory Model](https:\u002F\u002Fgo.dev\u002Fref\u002Fmem) — для модуля 02\n\n---\n\n## 📱 Главный источник новостей по Go (Telegram)\n\nЕсли вы пишете на Go в 2026 — подпишитесь, это сэкономит часы поиска:\n\n- 🥇 **[@Golang_google](https:\u002F\u002Ft.me\u002FGolang_google)** — главный русскоязычный канал по Go. Свежие фичи, статьи, разбор PR в Go core, вакансии Middle\u002FSenior, мемы. Это первое, что должно быть в подписках.\n- 📂 **[Папка Telegram «Go-ресурсы»](https:\u002F\u002Ft.me\u002Faddlist\u002FMUtJEeJSxeY2YTFi)** — собранная коллекция каналов: новости, чаты по Go, вакансии, материалы для собесов. Добавляется одной кнопкой.\n\nДополнительно стоит мониторить:\n- [Gophers Slack](https:\u002F\u002Finvite.slack.golangbridge.org\u002F) — англоязычное community №1, есть канал `#russian`\n- [r\u002Fgolang](https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fgolang\u002F) — субреддит\n- [Hacker News tag golang](https:\u002F\u002Fhn.algolia.com\u002F?q=golang)\n\n---\n\n## ⚠️ Красные флаги — типичные ошибки, которые тормозят рост\n\nЭто вещи, которые на каждом ревью встречаются у Junior\u002FMiddle и тормозят повышение грейда. Если узнаёте себя — пересоберите подход.\n\n1. **«Я смотрю курс, но не пишу код».** Пассивный просмотр видосов не даёт навыка. Правило: каждые 10 минут видео → 20 минут самостоятельной практики.\n2. **Игнорирование `go vet`, `golangci-lint` и race detector.** Если запускаете тесты без `-race` — вы ловите гонки в проде, а не локально.\n3. **Прятать ошибки через `_`.** `f, _ := os.Open(...)` — классика. В Go ошибки — часть контракта функции, их обрабатывают, а не глотают.\n4. **Делать всё через интерфейсы «на всякий случай».** Интерфейс пишется на стороне потребителя и только когда есть ≥ 2 реализации. Преждевременная абстракция — главный анти-паттерн в Go.\n5. **Goroutine без `context` и без `WaitGroup`\u002F`errgroup`.** Любая горутина, которая не умеет завершаться по сигналу — потенциальная утечка.\n6. **`panic` вместо ошибки.** `panic` — только для невосстановимых ситуаций (битый инвариант), не для «не нашёл юзера в БД».\n7. **Один большой `pkg\u002Futils`.** Признак отсутствия архитектуры. Разносите по доменным пакетам.\n8. **Глобальные переменные и init-магия.** Усложняет тесты, делает порядок инициализации непредсказуемым.\n9. **Тесты только на happy path.** Edge cases, ошибочные пути, конкурентность — без них тест бесполезен.\n10. **«У меня нет времени на pprof \u002F OpenTelemetry».** На Senior без observability и профилирования не берут. Закладывайте их в проект с первого коммита.\n11. **Копипаста из ChatGPT\u002FCopilot без понимания.** AI — помощник, не автор. Если не можете объяснить каждую строку — переписывайте.\n12. **Перестали читать стандартную библиотеку.** Исходники `net\u002Fhttp`, `sync`, `context` — лучший учебник по идиомам Go.\n13. **Игнор `slog`, тащат `logrus`\u002F`zap` в новые проекты.** С 1.21+ структурное логирование есть в стандартной библиотеке. Используйте.\n14. **Не знают, что такое escape analysis.** На Middle+ это базовый инструмент оптимизации.\n15. **Отказ от собеседований «пока не готов».** Собеседования — лучший фидбек. Идите даже если не готовы — узнаете, что качать.\n\n---\n\n## 💎 Лучшие практики Go — разбор по темам\n\nЭто сборник идиом и инженерных правил, которые отличают код Junior от кода Senior. Каждый пункт — то, что вы будете слышать на ревью в любой нормальной Go-команде.\n\n### 🧱 Структура кода и пакеты\n- **Имена пакетов — короткие, нижний регистр, без подчёркиваний**: `user`, `auth`, `httputil`. Никаких `user_service` или `userService`. Пакет `utils` \u002F `common` \u002F `helpers` — запах, режьте по доменам.\n- **Пакет — это API**. Экспортируйте минимум: `MarshalJSON` — да, внутренний `parseHeader` — нет. Чем меньше публичная поверхность, тем проще менять реализацию.\n- **Не делайте циклические импорты**. Если возникает желание — значит, домен разрезан неправильно. Выносите общие типы в отдельный пакет (`domain`, `model`) или объединяйте.\n- **Файлы внутри пакета группируйте по фиче, а не по типу**. `user_repository.go`, `user_service.go` — лучше, чем `models.go`, `services.go`, `repositories.go`.\n- **`internal\u002F` — ваш друг**. Всё, что не должно импортироваться извне модуля, кладите в `internal\u002F`. Go-компилятор сам запретит.\n- **Не плодите подпакеты раньше времени**. Один файл — нормально. Разделение на пакеты делайте, когда видно границу ответственности.\n\n### ✍️ Стиль и именование\n- **Соблюдайте `gofmt`\u002F`gofumpt`**. Споров о стиле в Go нет — есть инструмент. Поставьте в pre-commit hook.\n- **Короткие имена в коротком скоупе, длинные — в широком**. `i` в цикле — норма; `userRepositoryFactory` в пакете `user` — избыточно (просто `Factory`).\n- **Аббревиатуры пишем единым регистром**: `userID`, `HTTPServer`, `URLParser`. Не `userId` и не `HttpServer`.\n- **Getter без `Get`**: `u.Name()`, не `u.GetName()`. Setter — с `Set`: `u.SetName(...)`.\n- **Имя интерфейса = действие + `er`**: `Reader`, `Writer`, `Closer`, `Stringer`. Интерфейс с одним методом — особенно ценный.\n- **Receiver — короткий и консистентный**: `u *User`, не `this`, не `self`, не `user`. И во всех методах одинаковый.\n\n### 🧯 Обработка ошибок\n- **Ошибка — это значение**. Возвращайте, проверяйте, оборачивайте. Никаких исключений.\n- **Оборачивайте с контекстом**: `fmt.Errorf(\"create user: %w\", err)`. Цепочка `%w` позволяет потом `errors.Is\u002FAs`.\n- **Не логируйте и не возвращайте одновременно**. Логирует только тот, кто решил, что ошибка обработана. Иначе одна ошибка превращается в три записи в логе.\n- **Sentinel-ошибки — для известных ситуаций**: `var ErrNotFound = errors.New(\"not found\")`. Сравнение через `errors.Is`.\n- **Типизированные ошибки — когда нужны детали**: `type ValidationError struct { Field, Msg string }`. Сравнение через `errors.As`.\n- **Не сравнивайте через `err.Error() == \"...\"`** — это хрупкая привязка к тексту.\n- **`panic` только для невосстановимого**: битый инвариант, невозможная ветка, init-ошибка. Бизнес-ошибки — `return err`.\n- **`defer` с проверкой ошибки**: `defer func() { if cerr := f.Close(); cerr != nil { err = errors.Join(err, cerr) } }()` — особенно для `Close` на записи.\n\n### 🌀 Конкурентность\n- **Don't communicate by sharing memory; share memory by communicating** — классическая мантра. Но если канал тащить не надо — `sync.Mutex` чище.\n- **Любая горутина должна знать, как умереть**. `context.Context` или `done`-канал — обязательно. Иначе утечка.\n- **Не запускайте `go f()` в библиотечных функциях**, если не задокументировали это. Управление горутиной — ответственность вызывающего.\n- **`context.Context` — первый параметр** функции, имя `ctx`. Не храните в struct (кроме особых случаев типа request-scoped объектов).\n- **Не передавайте `*sync.Mutex` по значению** — копируется состояние блокировки. Используйте указатель или встраивайте по значению в структуру (она тоже не должна копироваться — `go vet` подскажет).\n- **`sync.WaitGroup.Add` — до `go`**, не внутри горутины. Иначе race.\n- **`errgroup` вместо ручного WaitGroup**, когда нужна агрегация ошибок и cancel при первой.\n- **`sync.Pool` — только для дорогих объектов**, которые реально переиспользуются. На мелочи даёт минус.\n- **Buffered channel `size = N` — это не оптимизация**, это бэк-прешер на N сообщений. Думайте про это как про очередь.\n- **Закрывает канал только отправитель**. Получатель — никогда. Иначе `send on closed channel` panic.\n- **Всегда тестируйте с `-race`**. Локально, в CI, в pre-merge — везде.\n\n### 🧩 Интерфейсы и дизайн\n- **Accept interfaces, return structs**. Параметры — узкие интерфейсы (`io.Reader`), возврат — конкретный тип. Так клиенту проще, чем гадать, что прячется за интерфейсом.\n- **Маленькие интерфейсы лучше больших**. `io.Reader` (1 метод) переиспользуется тысячами библиотек. `Repository` с 15 методами — нет.\n- **Интерфейсы определяет потребитель, не реализатор**. Не пишите `UserRepository` в пакете `user` и не реализуйте его там же. Пакет `service` сам объявит, что ему нужно от хранилища.\n- **`any` (он же `interface{}`) — крайнее средство**. С generics 1.18+ почти всегда есть лучше.\n- **Не делайте `Service` god-object**. Если структура зависит от 10 интерфейсов — она делает слишком много.\n\n### 🧪 Тестирование\n- **Table-driven tests — стандарт de facto**. Один цикл, понятный diff, легко добавлять кейсы.\n- **`t.Parallel()` в каждом тесте, где можно**. Catch race conditions раньше + быстрее CI.\n- **`t.Cleanup()` вместо `defer`** — корректнее работает с параллельными подтестами.\n- **Не моки ради моков**. Моким то, что выходит за процесс (DB, HTTP, gRPC). Чистые функции моками не покрывают — это превращает тест в проверку реализации, а не поведения.\n- **Integration тесты — через [testcontainers-go](https:\u002F\u002Fgolang.testcontainers.org\u002F)**. Реальный Postgres\u002FRedis в Docker лучше любого мока.\n- **Fuzzing — для парсеров, валидаторов, кодеков**. Запустите на 10 минут — найдёте баги, которые table-driven никогда не покрывал бы.\n- **Покрытие — не цель, а индикатор**. 80% с осмысленными тестами лучше 100% с проверкой геттеров.\n- **`testdata\u002F` — для фикстур**. Go-toolchain игнорирует эту папку при сборке.\n\n### 🌐 HTTP и API\n- **Timeouts на сервере — обязательно**: `ReadHeaderTimeout`, `ReadTimeout`, `WriteTimeout`, `IdleTimeout`. Дефолтный `http.Server{}` без них — приглашение к slowloris.\n- **Timeouts на клиенте — тоже**. `http.DefaultClient` без таймаута — мина замедленного действия. Создавайте свой `http.Client`.\n- **`context.Context` в каждый запрос**. `http.NewRequestWithContext` — стандарт.\n- **`r.Body.Close()` после `io.ReadAll`** — иначе утечка соединения из пула.\n- **Не используйте `http.Get\u002FPost` в продакшене** — у них нет таймаутов и контекста.\n- **Graceful shutdown**: `srv.Shutdown(ctx)` по сигналу `SIGTERM`, дайте 10–30 секунд, чтобы инфлайт-запросы доехали.\n- **Middleware — цепочкой, в правильном порядке**: recover → request id → logging → tracing → auth → rate limit → handler.\n- **Не паникуйте в хендлере**. Recover-middleware ловит panic и возвращает 500, но это последняя линия обороны, не норма.\n- **Версионируйте API с первого дня**: `\u002Fv1\u002Fusers`. Менять контракт без версии — ломать клиентов.\n\n### 🗄 Базы данных\n- **Connection pool — настраивайте под нагрузку**. `SetMaxOpenConns`, `SetMaxIdleConns`, `SetConnMaxLifetime`. Дефолты — не для прода.\n- **Всегда `QueryContext`\u002F`ExecContext`** — версии без контекста зависнут навечно при проблемах с БД.\n- **Транзакция — короткая**. Никаких HTTP-вызовов и долгих расчётов внутри `BEGIN ... COMMIT`. Только работа с БД.\n- **Откат через `defer`**: `defer tx.Rollback()` сразу после `Begin`. `Commit` отменит rollback. Безопасно и идиоматично.\n- **`sqlc` или `pgx` напрямую** > ORM. В Go ORM-ы дают мало пользы и много магии.\n- **Миграции — версионируемые и идемпотентные** (`goose`\u002F`atlas`). Никаких `ALTER TABLE` руками в проде.\n- **Индексы под реальные запросы**, не «на всякий случай». `EXPLAIN ANALYZE` — ваш главный инструмент.\n- **N+1 запросов — главный убийца перформанса**. JOIN или batch-загрузка.\n\n### ⚡ Производительность\n- **Сначала измерь, потом оптимизируй**. `pprof` + benchmark + `benchstat`. Интуиция врёт.\n- **Preallocate slices\u002Fmaps**: `make([]T, 0, n)` и `make(map[K]V, n)` — экономит реаллокации.\n- **Избегайте `fmt.Sprintf` в hot path** — рефлексия дорогая. Используйте `strconv` и `strings.Builder`.\n- **Escape analysis читайте**: `go build -gcflags='-m'`. Что уехало в кучу — кандидат на оптимизацию.\n- **GOMEMLIMIT (1.19+)** — soft limit на память, спасает от OOM при кратковременных всплесках.\n- **PGO (Profile-Guided Optimization)** — бесплатные 5–15% перформанса с 1.21+. Просто положите `default.pgo` рядом с `main.go`.\n- **`sync.Pool` — для аллокаций, не для коннектов**. Коннекты — это другой контракт жизни.\n- **Не страдайте микро-оптимизациями** в коде, который вызывается 10 раз в день. Оптимизируйте hot path.\n\n### 📜 Логирование и observability\n- **`log\u002Fslog` (1.21+) — стандарт**. Никаких `logrus`\u002F`zap` в новых проектах без причины.\n- **Structured logging, не `fmt.Printf`-style**. `slog.Info(\"user created\", \"id\", u.ID, \"email\", u.Email)` — поля, не интерполяция.\n- **Не логируйте PII в plain text**: пароли, токены, email-ы. Маскируйте или хешируйте.\n- **Correlation\u002Ftrace id во всех логах запроса**. Без этого распределённая трассировка бесполезна.\n- **Логи — это события, метрики — это числа, трейсы — это причинно-следственная цепочка**. Не путайте, не подменяйте одно другим.\n- **OpenTelemetry — единый стандарт** для traces\u002Fmetrics\u002Flogs. Не пишите кастомные клиенты.\n- **`pprof` всегда включён в проде** на отдельном порту за auth. Когда сервис тормозит, у вас 30 секунд на снятие профиля.\n\n### 🔒 Безопасность\n- **`govulncheck` в CI** — на каждый PR. Бесплатно ловит известные CVE в зависимостях.\n- **`gosec` для статанализа**. Поможет с `crypto\u002Fmd5`, hardcoded credentials и подобным.\n- **TLS везде**. mTLS между сервисами. Никаких `InsecureSkipVerify: true` в проде.\n- **JWT — RS256, не HS256**. Симметричный ключ утечёт.\n- **Secrets — через Vault\u002FSOPS\u002Fcloud KMS**, не в `.env` и не в Git.\n- **Валидация ввода на границе**. Доверяете только тому, что сами проверили.\n- **Rate limiting на уровне gateway и приложения**. Двойной слой.\n- **Update Go регулярно**. Минорные релизы — закрытые CVE.\n\n### 📦 Зависимости и модули\n- **Минимизируйте зависимости**. Каждая внешняя библиотека — потенциальный CVE, конфликт версий, и просто чужой код в вашем бинаре.\n- **Проверяйте `go.sum` в Git**. Без него `go mod download` может скачать что угодно.\n- **`replace` — только локально, не в релизах**. Иначе ломаете downstream.\n- **`go mod tidy` — на каждый коммит**. CI должен это проверять.\n- **Pin major-версии в импортах**: `v2`\u002F`v3` в пути модуля. Breaking changes не должны быть тихими.\n\n### 🚢 Production-готовность\n- **Graceful shutdown** — обязательно. SIGTERM → stop accepting → wait inflight → exit.\n- **Health checks — раздельно**: `\u002Flivez` (жив ли процесс) и `\u002Freadyz` (готов ли принимать трафик). Kubernetes их различает.\n- **Конфиг через env + flags + файл**, в таком порядке приоритета. `viper`\u002F`koanf` это умеют из коробки.\n- **12-factor app** — читайте, это не догма, а проверенный список граблей.\n- **Distroless Docker image** для финального бинаря: `gcr.io\u002Fdistroless\u002Fstatic`. Нет shell — меньше attack surface, ещё и весит мало.\n- **Multi-stage Dockerfile**: builder + minimal runtime. Никаких `golang:1.23` в проде.\n- **`CGO_ENABLED=0` по умолчанию**. Статический бинарь — деплоится куда угодно.\n- **Версия и commit hash в `\u002Fversion` endpoint**. `-ldflags \"-X main.version=...\"` при сборке.\n\n### 🧠 Code review и командная работа\n- **Маленькие PR**. 200 строк ревьюится за 30 минут, 2000 — не ревьюится вообще.\n- **Один PR = одно изменение**. Рефактор и новая фича — отдельно.\n- **Тесты в том же PR, что и код**. «Тесты добавлю потом» = «никогда».\n- **Ревью — про код, не про человека**. «Этот метод можно упростить» вместо «ты не понимаешь Go».\n- **Conventional commits**: `feat:`, `fix:`, `docs:`, `refactor:`. Это даёт автогенерацию changelog и понятную историю.\n- **ADR (Architecture Decision Records)** — для важных решений. Через год вы забудете, почему выбрали NATS, а не Kafka.\n\n> 📌 Шпаргалка по идиомам в одном месте: [Go Code Review Comments](https:\u002F\u002Fgo.dev\u002Fwiki\u002FCodeReviewComments), [Effective Go](https:\u002F\u002Fgo.dev\u002Fdoc\u002Feffective_go), [Uber Go Style Guide](https:\u002F\u002Fgithub.com\u002Fuber-go\u002Fguide\u002Fblob\u002Fmaster\u002Fstyle.md).\n\n---\n\n## 🔥 3 железных правила\n\n1. **Каждый модуль закрывается проектом.** Без проекта — модуль не пройден.\n2. **Каждый проект коммитится на GitHub.** Публичный repo с README и тестами — ваш портфель.\n3. **Каждую неделю пишете заметку «что узнал»** — в `\u002Fnotes` или личный блог. Это закрепляет знание.\n\n---\n\n## ❓ FAQ\n\n**❓ Можно без опыта программирования?**  \nМожно, но будет тяжело. Сначала пройдите [CS50](https:\u002F\u002Fcs50.harvard.edu\u002F) (бесплатно) — базовый CS и алгоритмы.\n\n**❓ Go или Rust в 2026?**  \nGo — для backend-сервисов, инфраструктуры, AI-агентов. Rust — для systems, embedded, perf-critical. Они не конкуренты. Учите Go, если цель — backend и быстро на работу.\n\n**❓ Нужна ли мат-база?**  \nДля модулей 00–12 — нет. Для 14 (distributed) и 16 (system design) — желательно знать теорию вероятности и базовую алгоритмику.\n\n**❓ Сколько часов в день?**  \nМинимум 1.5 часа в будни + 3–4 часа в выходные. Меньше — потеряете темп.\n\n**❓ Как искать первую работу?**  \nПосле модуля 06 уже можно отправлять CV на Junior. После модуля 09 — на Middle. Главное — публичные проекты на GitHub и пет-проект, который вы можете объяснить в деталях.\n\n**❓ Что делать, если застрял?**  \nЧас борьбы → пять минут на решение из интернета → реализация заново без подглядывания. Если застрял на неделю — спроси в [Gophers Slack](https:\u002F\u002Finvite.slack.golangbridge.org\u002F) или в [@Golang_google](https:\u002F\u002Ft.me\u002FGolang_google) чате.\n\n---\n\n## 🤝 Контрибьюции\n\nPR'ы приветствуются: опечатки, новые бесплатные ресурсы на русском, уточнения по модулям. Открой issue, если нашёл устаревшую ссылку.\n\n---\n\n## 📄 Лицензия\n\nMIT — используй, форкай, улучшай.\n\n---\n\n⭐ Если roadmap помог — поставь звезду, это мотивирует развивать курс.\n","该项目是一个针对2026年的Go语言学习路线图，提供从基础到高级的全面指导。它包括19个模块，每个模块都结合了理论、实践和免费资源，并以一个可放入个人作品集的小项目结束。技术特点涵盖了最新的Go特性如generics, fuzzing等，以及分布式系统、可观测性、AI基础设施等内容。适合Go初学者、希望转行至Go的后端开发者、初级Go工程师寻求晋升路径的人士，以及对构建AI基础设施感兴趣的开发者。整个课程强调实践操作，预计完成时间为12-18个月，每周投入10-15小时。",2,"2026-06-11 04:08:54","CREATED_QUERY"]