Files
obsidian/Go/Roadmap.md
2026-02-05 15:20:32 +00:00

799 lines
54 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 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 <pid> # подключение к процессу
```
### Управление зависимостями
```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`