From 005457c53920bfdae265acfe4ab555564a290717 Mon Sep 17 00:00:00 2001 From: Cosmo Date: Thu, 5 Feb 2026 15:20:28 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9A=20Go=20Roadmap:=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=BD=D1=83=D0=BB=D1=8F=20=D0=B4=D0=BE=20Middle?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Go/Roadmap.md | 798 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 798 insertions(+) create mode 100644 Go/Roadmap.md diff --git a/Go/Roadmap.md b/Go/Roadmap.md new file mode 100644 index 0000000..94120c8 --- /dev/null +++ b/Go/Roadmap.md @@ -0,0 +1,798 @@ +# 🚀 Roadmap: Go (Golang) — от нуля до Middle разработчика + +> **Для:** Даниил — разработчик с опытом C#/.NET, знакомый с основами Go +> **Цель:** Системно пройти весь путь и выйти на уровень уверенного Middle Go-разработчика +> **Общий срок:** ~6-9 месяцев при занятиях 1-2 часа в день +> **Дата создания:** Февраль 2026 + +--- + +## 📋 Содержание + +1. [Этап 1: Основы языка](#этап-1-основы-языка-3-4-недели) +2. [Этап 2: Продвинутые концепции](#этап-2-продвинутые-концепции-4-5-недель) +3. [Этап 3: Стандартная библиотека](#этап-3-стандартная-библиотека-4-5-недель) +4. [Этап 4: Паттерны и архитектура](#этап-4-паттерны-и-архитектура-4-6-недель) +5. [Этап 5: Инструменты экосистемы](#этап-5-инструменты-экосистемы-2-3-недели) +6. [Этап 6: Продвинутый уровень](#этап-6-продвинутый-уровень-4-6-недель) +7. [Пет-проекты](#-пет-проекты) +8. [Ресурсы](#-ресурсы) +9. [Инструменты разработчика](#-инструменты-разработчика) +10. [Подборка статей](#-подборка-статей-топ-25) + +--- + +## Этап 1: Основы языка (3-4 недели) + +> 💡 *У тебя есть опыт C#, поэтому этот этап можно пройти быстрее, но не пропускай — Go принципиально отличается философией от C#.* + +### Темы + +| Тема | Описание | +|------|----------| +| **Установка и настройка** | Go toolchain, GOPATH vs Go Modules, workspace | +| **Базовый синтаксис** | Переменные, константы, `:=`, базовые типы (`int`, `float64`, `string`, `bool`) | +| **Составные типы** | Массивы, слайсы (slices), карты (maps), структуры (structs) | +| **Управление потоком** | `if/else`, `for` (единственный цикл!), `switch`, `defer` | +| **Функции** | Множественные возвращаемые значения, именованные возвраты, variadic функции | +| **Указатели** | `*` и `&`, передача по значению vs по ссылке (аналогии с C#: `ref`/`out`) | +| **Пакеты и модули** | `go mod init`, импорты, видимость (заглавная буква = public) | +| **Обработка ошибок** | Паттерн `if err != nil`, `errors.New`, `fmt.Errorf` с `%w` | +| **Строки и руны** | UTF-8, `rune` vs `byte`, пакет `strings` | + +### Ресурсы для этапа + +- 📖 [A Tour of Go](https://go.dev/tour/) — интерактивный тур от создателей Go (обязательно!) +- 📖 [Go by Example](https://gobyexample.com/) — краткие примеры на каждую тему +- 📖 [Effective Go](https://go.dev/doc/effective_go) — официальный гайд по идиоматичному Go +- 📖 [Go Documentation](https://go.dev/doc/) — вся официальная документация +- 🎥 [Golang Tutorial for Beginners — TechWorld with Nana](https://www.youtube.com/watch?v=yyUHQIec83I) — полный курс для начинающих +- 🎥 [Learn Go Programming — FreeCodeCamp (YouTube)](https://www.youtube.com/watch?v=un6ZyFkqFKo) — 6+ часов бесплатного курса +- 📝 [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests) — учим Go через написание тестов (TDD) + +### Практические задания + +1. ✅ Пройти весь [Tour of Go](https://go.dev/tour/) +2. ✅ Решить 15-20 задач на [Exercism (Go track)](https://exercism.org/tracks/go) +3. ✅ Написать программу «Угадай число» с вводом из консоли +4. ✅ Реализовать калькулятор с поддержкой операций +, -, *, / через CLI-аргументы +5. ✅ Написать утилиту подсчёта слов в файле (аналог `wc`) +6. ✅ Реализовать простую телефонную книгу с сохранением в JSON-файл + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Создать Go-проект с нуля (`go mod init`) +- [ ] Объяснить разницу между слайсом и массивом +- [ ] Работать со структурами и методами +- [ ] Корректно обрабатывать ошибки (не игнорировать `err`) +- [ ] Использовать `defer` для очистки ресурсов +- [ ] Работать с указателями +- [ ] Понимать систему пакетов и видимость +- [ ] Читать и записывать файлы +- [ ] Объяснить, почему в Go нет `while`, `class`, наследования и исключений + +--- + +## Этап 2: Продвинутые концепции (4-5 недель) + +### Темы + +| Тема | Описание | +|------|----------| +| **Интерфейсы** | Неявная реализация, пустой интерфейс `any`, type assertion, type switch | +| **Горутины (goroutines)** | Легковесные потоки, `go func()`, lifecycle | +| **Каналы (channels)** | Буферизованные и небуферизованные, направленные каналы | +| **Select** | Мультиплексирование каналов, таймауты, `default` | +| **Sync примитивы** | `sync.Mutex`, `sync.RWMutex`, `sync.WaitGroup`, `sync.Once`, `sync.Map` | +| **Context** | `context.Background()`, `WithCancel`, `WithTimeout`, `WithValue`, пробрасывание | +| **Generics** | Type parameters, constraints, `comparable`, `any`, когда использовать | +| **Embedding** | Встраивание структур и интерфейсов (вместо наследования) | +| **Обработка ошибок (продвинуто)** | `errors.Is`, `errors.As`, wrapping, sentinel errors, custom error types | +| **Паттерн init()** | Порядок инициализации, `init()` функции | + +### Ресурсы для этапа + +- 📖 [Go Concurrency Patterns (Go Blog)](https://go.dev/blog/pipelines) — паттерны конкурентности +- 📖 [Share Memory by Communicating (Go Blog)](https://go.dev/blog/codelab-share) — ключевая философия Go +- 📖 [Введение в Generics (Go Blog)](https://go.dev/blog/intro-generics) — официальное введение в дженерики +- 📖 [Go Concurrency Guide (GitHub)](https://github.com/luk4z7/go-concurrency-guide) — подробный гайд по конкурентности +- 🎥 [Concurrency in Go (YouTube)](https://www.youtube.com/watch?v=LvgVSSpwND8) — Jake Wright +- 📖 [Паттерны многопоточности в Go (Habr)](https://habr.com/ru/articles/852556/) — отличная статья на русском +- 📖 [Контекст в Go: как правильно (Habr)](https://habr.com/ru/articles/714370/) — про context + +### Практические задания + +1. ✅ Pipeline: написать конвейер обработки данных через каналы (генератор → фильтр → обработчик) +2. ✅ Fan-Out/Fan-In: параллельно скачать 10 URL и собрать результаты +3. ✅ Worker Pool: реализовать пул воркеров с ограничением конкурентности +4. ✅ Graceful Shutdown: HTTP-сервер с корректным завершением по сигналу +5. ✅ Реализовать потокобезопасный кеш с TTL через `sync.RWMutex` +6. ✅ Написать generic-функции `Map`, `Filter`, `Reduce` для слайсов +7. ✅ Rate Limiter через каналы и `time.Ticker` + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Объяснить разницу между горутинами и потоками ОС +- [ ] Использовать каналы для коммуникации между горутинами +- [ ] Предотвращать дедлоки и утечки горутин +- [ ] Корректно использовать `context` для отмены и таймаутов +- [ ] Реализовать интерфейс и понимать неявную реализацию +- [ ] Написать generic-функцию с constraint'ами +- [ ] Использовать `sync.WaitGroup` для ожидания горутин +- [ ] Знать когда использовать mutex, а когда — каналы +- [ ] Объяснить embedding vs наследование + +--- + +## Этап 3: Стандартная библиотека (4-5 недель) + +### Темы + +| Тема | Описание | +|------|----------| +| **net/http** | HTTP-сервер, роутинг (Go 1.22+ pattern routing), middleware, `http.Client` | +| **encoding/json** | Marshal/Unmarshal, теги структур, `json.RawMessage`, streaming decoder | +| **io / io/fs** | Reader/Writer интерфейсы, `io.Copy`, `io.Pipe`, файловые системы | +| **os / os/exec** | Работа с файлами, переменные окружения, запуск процессов | +| **testing** | Unit-тесты, table-driven tests, бенчмарки, subtests, `testing.T` | +| **log/slog** | Структурированное логирование (Go 1.21+) | +| **database/sql** | Подключение к БД, prepared statements, транзакции, connection pool | +| **html/template, text/template** | Шаблонизация | +| **regexp** | Регулярные выражения | +| **time** | Работа с датой/временем, таймеры, тикеры, `time.Format` | +| **flag / os.Args** | Парсинг CLI-аргументов | +| **crypto** | Хеширование, bcrypt, JWT-основы | +| **embed** | Встраивание файлов в бинарник (`//go:embed`) | + +### Ресурсы для этапа + +- 📖 [Go Standard Library Documentation](https://pkg.go.dev/std) — полный список пакетов стандартной библиотеки +- 📖 [Writing Web Applications (Go Wiki)](https://go.dev/doc/articles/wiki/) — официальный туториал по веб +- 📖 [How to use the net/http package (Go Blog)](https://go.dev/blog/routing-enhancements) — улучшения роутинга в Go 1.22 +- 📖 [Using Go's testing Package](https://go.dev/doc/tutorial/add-a-test) — официальный туториал по тестам +- 📖 [Structured Logging with slog (Go Blog)](https://go.dev/blog/slog) — про новый slog +- 🎥 [Let's Go (Alex Edwards) — книга + примеры](https://lets-go.alexedwards.net/) — лучший ресурс по веб-разработке на Go +- 📖 [Go Database/SQL Tutorial](https://go.dev/doc/database/) — работа с базами данных + +### Практические задания + +1. ✅ HTTP-сервер с CRUD API для заметок (хранение в памяти) +2. ✅ Добавить к API middleware: логирование, recovery, CORS +3. ✅ JSON-парсер конфигурации с валидацией +4. ✅ Unit-тесты с table-driven подходом для всех API-эндпоинтов +5. ✅ Бенчмарк сравнения разных подходов к конкатенации строк +6. ✅ CLI-утилита с подкомандами (аналог `git`: add, commit, log) +7. ✅ HTTP-клиент с retry-логикой, таймаутами и обработкой ошибок +8. ✅ Подключить PostgreSQL через `database/sql` + миграции + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Создать HTTP API с роутингом на `net/http` (без фреймворков) +- [ ] Написать middleware-цепочку +- [ ] Сериализовать/десериализовать JSON со вложенными структурами +- [ ] Писать table-driven тесты и бенчмарки +- [ ] Использовать `slog` для структурированного логирования +- [ ] Работать с `database/sql` (подключение, CRUD, транзакции) +- [ ] Парсить CLI-флаги и аргументы +- [ ] Понимать интерфейсы `io.Reader` / `io.Writer` и их композицию +- [ ] Использовать `//go:embed` для встраивания статики + +--- + +## Этап 4: Паттерны и архитектура (4-6 недель) + +### Темы + +| Тема | Описание | +|------|----------| +| **Структура проекта** | `/cmd`, `/internal`, `/pkg`, [Standard Go Project Layout](https://github.com/golang-standards/project-layout) | +| **Clean Architecture** | Слои: domain, usecase, repository, delivery; зависимости внутрь | +| **DDD в Go** | Entities, Value Objects, Aggregates, Repositories в контексте Go | +| **SOLID в Go** | Как применять принципы в языке без классов и наследования | +| **Dependency Injection** | Ручной DI через конструкторы (без контейнеров как в C#) | +| **Repository Pattern** | Абстракция над хранилищем данных через интерфейсы | +| **Паттерны ошибок** | Sentinel errors, typed errors, error wrapping стратегии | +| **Configuration** | ENV, YAML/TOML конфиги, `viper`, 12-factor apps | +| **Middleware/Decorator** | Обёртки для бизнес-логики и HTTP | +| **Graceful Degradation** | Circuit breaker, retry, timeout patterns | + +### Ресурсы для этапа + +- 📖 [Standard Go Project Layout (GitHub)](https://github.com/golang-standards/project-layout) — стандартная структура проекта +- 📖 [Go-микросервисы: Clean Architecture и DDD (Habr)](https://habr.com/ru/articles/911018/) — отличная статья на русском +- 📖 [Go Clean Architecture Template (GitHub, 7.2k⭐)](https://github.com/evrone/go-clean-template) — шаблон от Evrone +- 📖 [Wild Workouts — Go DDD Example (GitHub, 6k⭐)](https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example) — полный пример DDD + CQRS +- 📖 [Todo API Microservice Example (GitHub)](https://github.com/MarioCarrion/todo-api-microservice-example) — DDD + Clean Architecture пример +- 📖 [Practical Go: Real World Advice](https://dave.cheney.net/practical-go/presentations/qcon-china.html) — Dave Cheney +- 📖 [Паттерны проектирования в Golang (Habr)](https://habr.com/ru/articles/875794/) — обзор основных паттернов +- 🎥 [MarioCarrion YouTube](https://www.youtube.com/@MarioCarrion) — Go + DDD + Microservices видео +- 📖 [Go Patterns (GitHub, 25k⭐)](https://github.com/tmrts/go-patterns) — коллекция паттернов + +### Практические задания + +1. ✅ Рефакторить API из этапа 3 в Clean Architecture +2. ✅ Выделить domain-слой с Value Objects и бизнес-правилами +3. ✅ Реализовать Repository Pattern с двумя реализациями (PostgreSQL + in-memory) +4. ✅ Добавить DI через конструкторы (wire up в `main.go`) +5. ✅ Написать конфигурацию через ENV + YAML с fallback +6. ✅ Реализовать Circuit Breaker для внешнего API-вызова +7. ✅ Написать integration-тесты с testcontainers + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Организовать Go-проект по Clean Architecture +- [ ] Использовать интерфейсы для DI без фреймворков +- [ ] Объяснить разницу между `/internal` и `/pkg` +- [ ] Применять SOLID-принципы в Go-контексте +- [ ] Проектировать слои приложения с чёткими границами +- [ ] Работать с конфигурацией по 12-factor +- [ ] Использовать DDD-подход для бизнес-логики +- [ ] Писать интеграционные тесты + +--- + +## Этап 5: Инструменты экосистемы (2-3 недели) + +### Темы + +| Тема | Описание | +|------|----------| +| **Docker** | Multi-stage Dockerfile для Go, scratch/distroless, оптимизация размера | +| **CI/CD** | GitHub Actions для Go (lint, test, build, deploy) | +| **golangci-lint** | Настройка `.golangci.yml`, популярные линтеры | +| **Makefile** | Автоматизация сборки, тестов, миграций | +| **Swagger/OpenAPI** | Генерация документации: `swaggo/swag`, `oapi-codegen` | +| **gRPC + Protobuf** | Межсервисное взаимодействие, кодогенерация | +| **Миграции БД** | `golang-migrate`, `goose` | +| **ORM и query builders** | `sqlx`, `pgx`, `GORM`, `sqlc` | +| **Мониторинг** | Prometheus метрики, health checks | +| **Логирование** | `slog`, `zap`, `zerolog` — структурированные логгеры | + +### Ресурсы для этапа + +- 📖 [golangci-lint Documentation](https://golangci-lint.run/) — официальная документация +- 📖 [GoLand 2025.1 — поддержка golangci-lint](https://blog.jetbrains.com/go/2025/04/16/goland-2025-1-is-out/) — JetBrains блог +- 📖 [The Go Ecosystem in 2025 (JetBrains)](https://blog.jetbrains.com/go/2025/11/10/go-language-trends-ecosystem-2025/) — обзор трендов экосистемы +- 📖 [Docker Official Go Guide](https://docs.docker.com/language/golang/) — Docker для Go +- 📖 [sqlc Documentation](https://docs.sqlc.dev/) — type-safe SQL +- 📖 [gRPC Go Quickstart](https://grpc.io/docs/languages/go/quickstart/) — начало работы с gRPC +- 📖 [golang-migrate (GitHub)](https://github.com/golang-migrate/migrate) — миграции + +### Практические задания + +1. ✅ Написать multi-stage Dockerfile для Go-приложения (<20MB образ) +2. ✅ Настроить GitHub Actions: lint → test → build → push Docker image +3. ✅ Настроить `golangci-lint` с `.golangci.yml` (минимум 10 линтеров) +4. ✅ Создать Makefile с командами: `build`, `test`, `lint`, `run`, `migrate` +5. ✅ Добавить Swagger-документацию к REST API +6. ✅ Написать gRPC-сервис с protobuf +7. ✅ Добавить Prometheus-метрики к HTTP-серверу + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Собирать Go в Docker с multi-stage build +- [ ] Настроить CI/CD pipeline для Go-проекта +- [ ] Использовать golangci-lint и понимать основные линтеры +- [ ] Генерировать API-документацию (Swagger) +- [ ] Работать с gRPC + Protobuf +- [ ] Управлять миграциями БД +- [ ] Добавлять метрики и health checks +- [ ] Писать `Makefile` для автоматизации + +--- + +## Этап 6: Продвинутый уровень (4-6 недель) + +### Темы + +| Тема | Описание | +|------|----------| +| **Concurrency Patterns** | Pipeline, Fan-Out/Fan-In, Or-Done, Tee, Bridge | +| **Performance** | Escape analysis, stack vs heap, memory alignment, reducing allocations | +| **Profiling (pprof)** | CPU/Memory профилирование, `go tool pprof`, flame graphs | +| **Tracing** | `go tool trace`, distributed tracing (OpenTelemetry) | +| **Benchmarking** | `testing.B`, `benchstat`, профилирование горячего кода | +| **Unsafe** | `unsafe.Pointer`, когда (не) использовать | +| **CGO** | Интеграция с C-библиотеками, накладные расходы | +| **Reflection** | `reflect` пакет, performance cost, альтернативы через generics | +| **Garbage Collector** | Как работает GC в Go, тюнинг через `GOGC`, `GOMEMLIMIT` | +| **Build tags и Cross-compilation** | Условная компиляция, сборка под разные платформы | +| **Fuzzing** | Встроенное fuzz-тестирование (Go 1.18+) | + +### Ресурсы для этапа + +- 📖 [Go Concurrency Patterns: Pipelines (Go Blog)](https://go.dev/blog/pipelines) — официальный пост +- 📖 [Profiling Go Programs (Go Blog)](https://go.dev/blog/pprof) — пособие по pprof +- 📖 [Getting to Go: The Journey of Go's Garbage Collector (Go Blog)](https://go.dev/blog/ismmkeynote) — GC deep dive +- 📖 [5 паттернов параллельного программирования в GO (Habr)](https://habr.com/ru/companies/otus/articles/722880/) +- 📖 [7 Powerful Golang Concurrency Patterns](https://cristiancurteanu.com/7-powerful-golang-concurrency-patterns-that-will-transform-your-code-in-2025/) — concurrency patterns 2025 +- 📖 [Pprof Through Examples](https://betterprogramming.pub/pprof-through-examples-exploring-optimizations-in-go-444fa08cf15f) +- 📖 [Go Fuzzing (Official)](https://go.dev/doc/security/fuzz/) — документация по фаззингу +- 🎥 [Kavya Joshi — Understanding Channels (GopherCon)](https://www.youtube.com/watch?v=KBZlN0izeiY) — как устроены каналы внутри + +### Практические задания + +1. ✅ Профилировать реальное приложение с `pprof`, найти и устранить bottleneck +2. ✅ Написать бенчмарки для критичного кода и оптимизировать (минимум 2x ускорение) +3. ✅ Реализовать паттерн Pipeline с graceful shutdown +4. ✅ Написать fuzz-тесты для парсера/валидатора +5. ✅ Реализовать свой connection pool с ограничением конкурентности +6. ✅ Собрать приложение под 3+ платформы через cross-compilation +7. ✅ Добавить OpenTelemetry tracing к микросервису + +### ✅ Чеклист: что должен уметь после этапа + +- [ ] Профилировать CPU и память через pprof +- [ ] Оптимизировать код на основе данных бенчмарков +- [ ] Реализовать продвинутые concurrency patterns +- [ ] Настроить distributed tracing +- [ ] Понимать как работает GC и влиять на его поведение +- [ ] Использовать fuzz-тестирование +- [ ] Cross-компилировать Go-приложения +- [ ] Знать когда (не) использовать unsafe и reflection + +--- + +## 🛠 Пет-проекты + +### Проект 1: CLI-утилита — `gowatch` (File Watcher) + +> **Уровень:** Начальный → Средний +> **Когда делать:** После этапа 1-2 +> **Срок:** 1-2 недели + +**Описание:** Утилита, которая отслеживает изменения файлов в директории и выполняет указанные команды. Аналог `nodemon` / `entr`. + +**Функционал:** +- Рекурсивный watch по файловой маске (`*.go`, `*.yaml`) +- Дебаунс повторных событий +- Выполнение произвольных команд при изменении +- Конфигурация через YAML или CLI-флаги +- Graceful restart отслеживаемого процесса + +**Стек:** Go stdlib, `fsnotify`, `cobra` (CLI), `viper` (конфиг) + +**Аналоги для вдохновения:** +- [air (GitHub, 18k⭐)](https://github.com/air-verse/air) — live reload для Go +- [watchexec](https://github.com/watchexec/watchexec) — на Rust, но отличный UX +- [entr](https://eradman.com/entrproject/) — классика Unix + +**Чему научишься:** Работа с файловой системой, горутины, каналы, CLI-парсинг, конфигурация. + +--- + +### Проект 2: REST API — Сервис управления задачами (Task Manager) + +> **Уровень:** Средний +> **Когда делать:** После этапа 3-4 +> **Срок:** 2-3 недели + +**Описание:** Полноценный REST API для управления задачами с аутентификацией, ролями и пагинацией. Типичный backend, аналог того, что делаешь на C#/ASP.NET. + +**Функционал:** +- CRUD задач с проектами и тегами +- JWT-аутентификация (регистрация/логин) +- Ролевая модель (admin/user) +- Пагинация, сортировка, фильтрация +- Swagger-документация +- Docker Compose (app + PostgreSQL + Redis) +- Unit + Integration тесты + +**Стек:** `net/http` (Go 1.22+) или `chi`, PostgreSQL, `pgx`/`sqlc`, `golang-migrate`, Redis, JWT, Docker + +**Аналоги для вдохновения:** +- [go-clean-template (Evrone)](https://github.com/evrone/go-clean-template) — чистый шаблон +- [Todolist API (MarioCarrion)](https://github.com/MarioCarrion/todo-api-microservice-example) — DDD пример +- [realworld-go](https://github.com/gothinkster/realworld) — RealWorld spec implementation + +**Чему научишься:** Clean Architecture, работа с БД, аутентификация, middleware, тестирование, Docker. + +--- + +### Проект 3: Telegram-бот — Персональный ассистент + +> **Уровень:** Средний +> **Когда делать:** После этапа 3 +> **Срок:** 1-2 недели + +**Описание:** Telegram-бот с полезным функционалом: заметки, напоминания, интеграция с API (погода, курсы валют). + +**Функционал:** +- Сохранение заметок с категориями +- Напоминания (cron-based) +- Получение курса валют / погоды через внешние API +- Inline-кнопки и callback'и +- Persistent storage (SQLite/PostgreSQL) +- Graceful shutdown + +**Стек:** [telebot](https://github.com/tucnak/telebot) или [telegram-bot-api](https://github.com/go-telegram-bot-api/telegram-bot-api), `cron`, `sqlite3`/`pgx` + +**Аналоги для вдохновения:** +- [go-telegram-bot-api (GitHub)](https://github.com/go-telegram-bot-api/telegram-bot-api) — популярная библиотека +- [telebot (GitHub)](https://github.com/tucnak/telebot) — ещё одна популярная либа + +**Чему научишься:** Работа с внешними API, webhook/polling, state management, scheduled tasks. + +--- + +### Проект 4: Микросервис с очередями — Система уведомлений + +> **Уровень:** Средний → Продвинутый +> **Когда делать:** После этапа 4-5 +> **Срок:** 3-4 недели + +**Описание:** Система из нескольких микросервисов, общающихся через очереди сообщений. Producer принимает запросы на уведомления, consumer'ы отправляют через разные каналы (email, Telegram, webhook). + +**Функционал:** +- API-сервис (producer): приём запросов на уведомления +- Worker-сервисы (consumers): email, Telegram, webhook +- Retry-логика и Dead Letter Queue +- gRPC для синхронной коммуникации между сервисами +- Distributed tracing (OpenTelemetry) +- Docker Compose для всей инфраструктуры +- Prometheus + Grafana для мониторинга + +**Стек:** RabbitMQ или Kafka, gRPC, Protobuf, PostgreSQL, Docker Compose, OpenTelemetry, Prometheus + +**Аналоги для вдохновения:** +- [shop-golang-microservices (GitHub)](https://github.com/meysamhadeli/shop-golang-microservices) — микросервисы на Go + RabbitMQ + gRPC +- [Wild Workouts (ThreeDotsLabs)](https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example) — DDD + CQRS +- [Watermill (ThreeDotsLabs)](https://github.com/ThreeDotsLabs/watermill) — библиотека для event-driven + +**Чему научишься:** Микросервисная архитектура, message queues, gRPC, observability, distributed systems. + +--- + +### Проект 5: Open-Source инструмент — `goscan` (Code Quality Scanner) + +> **Уровень:** Продвинутый +> **Когда делать:** После этапа 6 +> **Срок:** 4-6 недель + +**Описание:** CLI-инструмент для анализа Go-кода: поиск антипаттернов, проверка архитектурных правил, генерация отчётов. Альтернатива: свой linter, генератор кода, или инструмент для DevOps. + +**Варианты проектов:** +1. **Code scanner** — AST-анализатор для поиска антипаттернов +2. **API mock generator** — генерация моков из OpenAPI-спеки +3. **DB schema diff tool** — сравнение схем БД и генерация миграций +4. **Log aggregator** — сборщик логов из нескольких сервисов с поиском + +**Функционал (для code scanner):** +- Парсинг Go AST (`go/ast`, `go/parser`) +- Кастомные правила через YAML-конфиг +- Отчёты в разных форматах (text, JSON, HTML) +- CI-интеграция (exit code, GitHub annotations) +- Публикация на GitHub с README, CI, GoDoc + +**Стек:** `go/ast`, `go/parser`, `go/types`, `cobra`, CI/CD + +**Аналоги для вдохновения:** +- [golangci-lint (GitHub, 15k⭐)](https://github.com/golangci/golangci-lint) — мега-линтер +- [staticcheck (GitHub)](https://github.com/dominikh/go-tools) — статический анализатор +- [go-critic (GitHub)](https://github.com/go-critic/go-critic) — кастомные проверки + +**Чему научишься:** Go AST, кодогенерация, open-source workflow, документация, CI/CD, публикация. + +--- + +## 📚 Ресурсы + +### Книги + +#### Обязательные (Must Read) + +| Книга | Автор | Описание | +|-------|-------|----------| +| **The Go Programming Language** | Donovan & Kernighan | "Библия Go" — фундаментальная книга, написанная соавтором «K&R C». Покрывает всё от основ до продвинутых тем | +| **Learning Go, 2nd Ed.** | Jon Bodner (O'Reilly, 2024) | Идеальна для перехода с другого языка. Покрывает generics, slog, новые фичи Go 1.21+ | +| **100 Go Mistakes and How to Avoid Them** | Teiva Harsanyi (Manning, 2022) | 100 реальных ошибок Go-разработчиков с объяснениями. Незаменима для роста | +| **Concurrency in Go** | Katherine Cox-Buday (O'Reilly) | Глубокое погружение в конкурентность: горутины, каналы, паттерны | + +#### Рекомендуемые + +| Книга | Автор | Описание | +|-------|-------|----------| +| **Go: идиомы и паттерны проектирования** | Jon Bodner (Питер, перевод) | Русское издание с паттернами Go | +| **Domain-Driven Design with Golang** | Matt Boyle (Packt, 2022) | DDD специфично для Go | +| **Let's Go / Let's Go Further** | Alex Edwards | Лучшие книги по веб-разработке на Go (практичные, с реальным проектом) | +| **Mastering Go, 4th Ed.** | Mihalis Tsoukalos (Packt, 2024) | Продвинутые темы: networking, системное программирование, безопасность | +| **The Power of Go: Tools** | John Arundel (Bitfield, 2024) | Написание CLI-утилит на Go | +| **Go at Scale: Patterns for Professional Development** | 2025 | Паттерны для production Go | +| **Cloud Native Go** | Matthew A. Titmus (O'Reilly) | Облачные приложения на Go | +| **Distributed Services with Go** | Travis Jeffery (Pragmatic Bookshelf) | Распределённые системы на Go | + +### Онлайн-курсы + +#### Бесплатные + +| Курс | Платформа | Описание | +|------|-----------|----------| +| [A Tour of Go](https://go.dev/tour/) | go.dev | Официальный интерактивный тур — обязательный стартовый ресурс | +| [Learn Go with Tests](https://quii.gitbook.io/learn-go-with-tests) | GitBook | TDD-подход к изучению Go. Отлично для практиков | +| [Go by Example](https://gobyexample.com/) | gobyexample.com | Краткие примеры на каждую тему | +| [Exercism Go Track](https://exercism.org/tracks/go) | exercism.org | 140+ упражнений с менторингом от сообщества | +| [Gophercises](https://gophercises.com/) | gophercises.com | Бесплатные упражнения с видео-решениями от Jon Calhoun | +| [Go Recipes (GitHub)](https://github.com/nikolaydubina/go-recipes) | GitHub | Огромная подборка рецептов и инструментов | + +#### Платные + +| Курс | Платформа | Описание | +|------|-----------|----------| +| [Learn Go (Boot.dev)](https://www.boot.dev/courses/learn-golang) | boot.dev | Интерактивный курс с проектами, один из лучших в 2025 | +| [Go: The Complete Developer's Guide](https://www.udemy.com/course/go-the-complete-developers-guide/) | Udemy | Stephen Grider — хорошо структурированный курс | +| [Web Development w/ Go](https://www.udemy.com/course/go-programming-language/) | Udemy | Todd McLeod — легенда Go-обучения | +| [Ultimate Go Programming](https://www.ardanlabs.com/training/ultimate-go/) | Ardan Labs | William Kennedy — самый глубокий курс. Для серьёзного изучения | +| [Let's Go / Let's Go Further](https://lets-go.alexedwards.net/) | alexedwards.net | Практический курс веб-разработки (книга + код) | +| [Backend-разработчик на Go (Skillfactory)](https://skillfactory.ru/) | Skillfactory | Расширенный курс на русском | + +### YouTube-каналы + +| Канал | Описание | +|-------|----------| +| [The Go Programming Language (@golang)](https://www.youtube.com/@golang) | Официальный канал Go — доклады с GopherCon, обновления языка | +| [Anthony GG](https://www.youtube.com/@anthonygg_) | Практичные туториалы, микросервисы, архитектура на Go | +| [NicJackson](https://www.youtube.com/@nicjackson) | Nic Jackson (HashiCorp) — Go + DevOps, микросервисы | +| [MarioCarrion](https://www.youtube.com/@MarioCarrion) | Go + DDD + Clean Architecture, production-проекты | +| [Melkey](https://www.youtube.com/@MelkeyDev) | Go-проекты, системный дизайн | +| [justforfunc](https://www.youtube.com/@justforfunc) | Francesc Campoy (ex-Google) — глубокие разборы Go | +| [TechWorld with Nana](https://www.youtube.com/@TechWorldwithNana) | Хороший стартовый курс по Go | +| [Николай Тузов (Skillbox)](https://www.youtube.com/@nikolay_tuzov) | Go на русском языке | + +### Telegram-каналы и сообщества + +| Канал/Чат | Ссылка | Описание | +|-----------|--------|----------| +| **Библиотека Go-разработчика** | [@goproglib](https://t.me/goproglib) | 23K+ подписчиков, статьи, новости, вакансии | +| **4gophers** | [@gophernews](https://t.me/gophernews) | Новости Go-экосистемы | +| **Golang — pair programming** | [@golang_pair](https://t.me/golang_pair) | Парное программирование на Go | +| **Gopher Club** | Сообщество Go разработчиков | Обсуждение Go и разработки | +| **Golang Go** | Сообщество СНГ Go разработчиков | Вопросы и обсуждения | +| **Go (Pair programming)** | — | Чат для совместного кодинга | +| **r/golang (Reddit)** | [reddit.com/r/golang](https://www.reddit.com/r/golang/) | Крупнейшее англоязычное сообщество | +| **Gophers Slack** | [gophers.slack.com](https://gophers.slack.com) | Международный Slack Go-разработчиков | + +### GitHub-репозитории для изучения + +> Хорошо написанный Go-код, на котором стоит учиться: + +| Репозиторий | Описание | +|-------------|----------| +| [avelino/awesome-go](https://github.com/avelino/awesome-go) | 🏆 Каталог всех Go-библиотек и фреймворков (140k⭐) | +| [golang/go](https://github.com/golang/go) | Исходный код самого Go — эталон стиля | +| [kubernetes/kubernetes](https://github.com/kubernetes/kubernetes) | Крупнейший Go-проект. Можно изучать архитектуру | +| [docker/cli](https://github.com/docker/cli) | Docker CLI на Go — отличный пример CLI-утилиты | +| [hashicorp/terraform](https://github.com/hashicorp/terraform) | Terraform — пример enterprise Go | +| [prometheus/prometheus](https://github.com/prometheus/prometheus) | Prometheus — мониторинг, хорошая архитектура | +| [go-chi/chi](https://github.com/go-chi/chi) | Лёгкий HTTP-роутер — чистый идиоматичный код | +| [uber-go/zap](https://github.com/uber-go/zap) | Высокопроизводительный логгер от Uber | +| [evrone/go-clean-template](https://github.com/evrone/go-clean-template) | Шаблон Clean Architecture для Go (7.2k⭐) | +| [tmrts/go-patterns](https://github.com/tmrts/go-patterns) | Паттерны проектирования в Go (25k⭐) | +| [ThreeDotsLabs/wild-workouts-go-ddd-example](https://github.com/ThreeDotsLabs/wild-workouts-go-ddd-example) | DDD + CQRS + Clean Architecture пример (6k⭐) | +| [nikolaydubina/go-recipes](https://github.com/nikolaydubina/go-recipes) | Рецепты и полезные трюки Go (4k⭐) | +| [a8m/golang-cheat-sheet](https://github.com/a8m/golang-cheat-sheet) | Шпаргалка по синтаксису Go | + +### Подкасты + +| Подкаст | Описание | +|---------|----------| +| [Go Time (Changelog)](https://changelog.com/gotime) | Главный подкаст о Go — архив из 300+ эпизодов. Финальный выпуск вышел в 2024, но архив бесценен | +| [Cup o' Go](https://cupogo.dev/) | Еженедельные новости Go за ~15 минут. Актуальный и лёгкий формат | +| [GolangShow](https://golangshow.com/) | Подкаст на английском и русском (от русскоязычных авторов) | +| [Go Gab](https://www.gogab.io/) | Короткие эпизоды (~3 мин) о Go | + +--- + +## 🔧 Инструменты разработчика + +### IDE / Редактор + +| Инструмент | Описание | Ссылка | +|------------|----------|--------| +| **GoLand** (JetBrains) | Лучшая IDE для Go. Рефакторинг, отладка, поддержка golangci-lint (с 2025.1). Платная, но есть бесплатная Community Edition | [jetbrains.com/go](https://www.jetbrains.com/go/) | +| **VS Code + Go Extension** | Бесплатная альтернатива. Extension от Go Team: gopls, delve, golangci-lint | [VS Code Go](https://marketplace.visualstudio.com/items?itemName=golang.Go) | +| **Neovim + gopls** | Для любителей Vim. `gopls` как LSP, `nvim-lspconfig` | [gopls](https://pkg.go.dev/golang.org/x/tools/gopls) | + +**Рекомендация для тебя:** GoLand (ты привык к JetBrains с Rider/ReSharper в C#-мире) или VS Code (если хочешь универсальность). + +**Обязательные плагины VS Code:** +- `golang.Go` — основной плагин +- `EditorConfig` — единый стиль кода +- `REST Client` — тестирование API +- `Docker` — работа с контейнерами +- `GitLens` — улучшенный Git + +### Линтеры + +| Инструмент | Описание | +|------------|----------| +| **[golangci-lint](https://golangci-lint.run/)** | 🏆 Мета-линтер — агрегирует 100+ линтеров в одном инструменте. Обязателен | +| **[staticcheck](https://staticcheck.dev/)** | Статический анализатор, входит в golangci-lint | +| **[gosec](https://github.com/securego/gosec)** | Проверка безопасности кода | +| **[errcheck](https://github.com/kisielk/errcheck)** | Проверка необработанных ошибок | +| **[govet](https://pkg.go.dev/cmd/vet)** | Встроенный в Go, ищет подозрительные конструкции | +| **[gofumpt](https://github.com/mvdan/gofumpt)** | Строгая версия `gofmt` | +| **[revive](https://github.com/mgechev/revive)** | Быстрый, настраиваемый линтер | + +**Минимальный `.golangci.yml`:** +```yaml +linters: + enable: + - errcheck + - gosimple + - govet + - ineffassign + - staticcheck + - unused + - gosec + - gofumpt + - revive + - gocritic + - exhaustive + - prealloc + - misspell + +linters-settings: + gocritic: + enabled-tags: + - diagnostic + - style + - performance +``` + +### Профилирование + +| Инструмент | Описание | +|------------|----------| +| **[pprof](https://pkg.go.dev/net/http/pprof)** | Встроенный профилировщик Go: CPU, memory, goroutines, block | +| **`go tool pprof`** | CLI для анализа pprof-данных | +| **`go tool trace`** | Трассировка выполнения программы — визуализация горутин, GC | +| **[Pyroscope](https://pyroscope.io/)** | Continuous profiling — профилирование в production | +| **[fgprof](https://github.com/felixge/fgprof)** | Full goroutine profiling (wall-clock time) | + +**Быстрый старт pprof:** +```go +import _ "net/http/pprof" + +go func() { + log.Println(http.ListenAndServe("localhost:6060", nil)) +}() +``` +```bash +go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 +go tool pprof http://localhost:6060/debug/pprof/heap +``` + +### Тестирование + +| Инструмент | Описание | +|------------|----------| +| **[testing](https://pkg.go.dev/testing)** | Встроенный пакет тестирования — `go test ./...` | +| **[testify](https://github.com/stretchr/testify)** | Assertions, mocks, suites — самая популярная тест-библиотека | +| **[gomock](https://github.com/uber-go/mock)** | Генерация моков из интерфейсов (uber-go/mock — актуальный форк) | +| **[testcontainers-go](https://github.com/testcontainers/testcontainers-go)** | Docker-контейнеры для интеграционных тестов | +| **[go-cmp](https://github.com/google/go-cmp)** | Умное сравнение значений от Google | +| **[httptest](https://pkg.go.dev/net/http/httptest)** | Встроенный пакет для тестирования HTTP | +| **Fuzzing** | `go test -fuzz=FuzzXxx` — встроенное fuzz-тестирование (Go 1.18+) | +| **[gotestsum](https://github.com/gotestyourself/gotestsum)** | Красивый вывод тестов | + +### Отладка + +| Инструмент | Описание | +|------------|----------| +| **[Delve (dlv)](https://github.com/go-delve/delve)** | Основной отладчик Go. Breakpoints, step, goroutine inspection | +| **GoLand Debugger** | Встроен в GoLand, использует Delve | +| **VS Code Go Debugger** | Также на базе Delve, настройка через `launch.json` | + +**Команды Delve:** +```bash +dlv debug ./cmd/server # запуск с отладкой +dlv test ./pkg/service # отладка тестов +dlv attach # подключение к процессу +``` + +### Управление зависимостями + +```bash +go mod init github.com/user/project # инициализация модуля +go mod tidy # очистка зависимостей +go mod vendor # вендоринг +go mod graph # граф зависимостей +go get github.com/pkg@latest # добавить/обновить зависимость +go work init # Go workspaces (мульти-модуль) +``` + +### Полезные CLI-утилиты + +| Утилита | Описание | +|---------|----------| +| `go generate` | Кодогенерация через `//go:generate` комментарии | +| `go vet` | Статический анализ | +| `gofmt` / `goimports` | Форматирование кода | +| `gofumpt` | Строгое форматирование | +| `godoc` | Локальная документация | +| [gore](https://github.com/x-motemen/gore) | Go REPL для экспериментов | +| [gojq](https://github.com/itchyny/gojq) | jq, написанный на Go | +| [goreleaser](https://goreleaser.com/) | Автоматизация релизов Go-приложений | +| [ko](https://ko.build/) | Сборка Go в OCI-образы без Dockerfile | +| [buf](https://buf.build/) | Линтер и генератор для Protobuf | +| [task](https://taskfile.dev/) | Альтернатива Make на Go | +| [air](https://github.com/air-verse/air) | Live reload для Go-разработки | + +--- + +## 📰 Подборка статей (топ-25+) + +### Официальный блог Go (go.dev/blog) + +1. [Effective Go](https://go.dev/doc/effective_go) — основа основ, обязательно прочитать +2. [Go Concurrency Patterns](https://go.dev/blog/pipelines) — паттерны конкурентности (pipelines) +3. [Advanced Go Concurrency Patterns](https://go.dev/blog/io2013-talk-concurrency) — продвинутые паттерны +4. [Share Memory by Communicating](https://go.dev/blog/codelab-share) — философия Go concurrency +5. [Error Handling and Go](https://go.dev/blog/error-handling-and-go) — обработка ошибок +6. [Working with Errors in Go 1.13](https://go.dev/blog/go1.13-errors) — errors.Is, errors.As, wrapping +7. [An Introduction to Generics](https://go.dev/blog/intro-generics) — введение в дженерики +8. [Structured Logging with slog](https://go.dev/blog/slog) — новый пакет логирования +9. [Routing Enhancements in Go 1.22](https://go.dev/blog/routing-enhancements) — улучшения net/http +10. [Profiling Go Programs](https://go.dev/blog/pprof) — профилирование +11. [Getting to Go: Journey of Go's Garbage Collector](https://go.dev/blog/ismmkeynote) — GC deep dive +12. [Go at Google: Language Design](https://go.dev/talks/2012/splash.article) — философия проектирования Go (Rob Pike) + +### Лучшие статьи на Habr + +13. [Паттерны проектирования в Golang](https://habr.com/ru/articles/875794/) — обзор основных паттернов (2025) +14. [Паттерны многопоточности в Go](https://habr.com/ru/articles/852556/) — concurrency patterns +15. [Go-микросервисы: Clean Architecture и DDD](https://habr.com/ru/articles/911018/) — стандартизация архитектуры (2025) +16. [Обработка ошибок в Go](https://habr.com/ru/articles/916904/) — полный гайд (2025) +17. [Ошибки в Go: Обработка, Обёртки и Лучшие Практики](https://habr.com/ru/articles/904712/) — практичный подход (2025) +18. [5 паттернов параллельного программирования в GO](https://habr.com/ru/companies/otus/articles/722880/) — OTUS +19. [5 паттернов проектирования в Go на примере котиков](https://habr.com/ru/companies/otus/articles/864748/) — Singleton, Factory, etc. (2024) +20. [Книга «Go: идиомы и паттерны проектирования»](https://habr.com/ru/companies/piter/articles/672402/) — обзор от Питер + +### Англоязычные must-read статьи + +21. [The "10x" Commandments of Highly Effective Go (JetBrains)](https://blog.jetbrains.com/go/2025/10/16/the-10x-commandments-of-highly-effective-go/) — 10 заповедей Go (2025) +22. [The Go Ecosystem in 2025 (JetBrains)](https://blog.jetbrains.com/go/2025/11/10/go-language-trends-ecosystem-2025/) — тренды экосистемы +23. [Practical Go: Real World Advice (Dave Cheney)](https://dave.cheney.net/practical-go/presentations/qcon-china.html) — практические советы +24. [Go Coding Official Standards and Best Practices](https://dev.to/leapcell/go-coding-official-standards-and-best-practices-284k) — стандарты и best practices +25. [What are the best Go books in 2026? (Bitfield Consulting)](https://bitfieldconsulting.com/posts/best-go-books) — обзор книг +26. [Pprof Through Examples](https://betterprogramming.pub/pprof-through-examples-exploring-optimizations-in-go-444fa08cf15f) — профилирование на примерах +27. [Go essentials reading list (GitHub)](https://github.com/mgaffney/go-essentials) — essential reading list +28. [Awesome Go Articles (GitHub)](https://github.com/khigor777/awesome-go-articles) — курированный список статей + +--- + +## 🗓 Сводная таблица прогресса + +| Этап | Длительность | Статус | +|------|-------------|--------| +| 1. Основы | 3-4 недели | ⬜ | +| 2. Продвинутые концепции | 4-5 недель | ⬜ | +| 3. Стандартная библиотека | 4-5 недель | ⬜ | +| 4. Паттерны и архитектура | 4-6 недель | ⬜ | +| 5. Инструменты экосистемы | 2-3 недели | ⬜ | +| 6. Продвинутый уровень | 4-6 недель | ⬜ | +| **Пет-проект 1:** CLI-утилита | 1-2 недели | ⬜ | +| **Пет-проект 2:** REST API | 2-3 недели | ⬜ | +| **Пет-проект 3:** Telegram-бот | 1-2 недели | ⬜ | +| **Пет-проект 4:** Микросервис | 3-4 недели | ⬜ | +| **Пет-проект 5:** Open-source инструмент | 4-6 недель | ⬜ | + +--- + +## 💡 Советы для перехода с C#/.NET на Go + +1. **Нет классов и наследования** → используй структуры + интерфейсы + embedding. Go — про композицию. +2. **Нет исключений** → `if err != nil { return err }` — это нормально и идиоматично. Привыкни. +3. **Нет DI-контейнера** → всё через конструкторы. `func NewService(repo Repository) *Service`. Просто и прозрачно. +4. **Нет LINQ** → для простых операций — `for` loops. Для сложных — generics (`Map`, `Filter`). +5. **Нет async/await** → горутины + каналы. Модель CSP вместо Task-based. +6. **Нет nuget** → `go mod` — проще и быстрее. +7. **Пакеты вместо namespaces** → visibility через регистр букв (заглавная = public). +8. **Минимализм** → Go-сообщество предпочитает stdlib и маленькие библиотеки вместо фреймворков. +9. **gofmt** → один стиль для всех. Никаких споров о форматировании. +10. **Быстрая компиляция** → Go компилируется за секунды. После C# это будет приятным сюрпризом. + +--- + +> 📌 **Последнее обновление:** Февраль 2026 +> 📌 **Файл:** `/home/daniil/.openclaw/workspace/golang/roadmap.md`