54 KiB
🚀 Roadmap: Go (Golang) — от нуля до Middle разработчика
Для: Даниил — разработчик с опытом C#/.NET, знакомый с основами Go
Цель: Системно пройти весь путь и выйти на уровень уверенного Middle Go-разработчика
Общий срок: ~6-9 месяцев при занятиях 1-2 часа в день
Дата создания: Февраль 2026
📋 Содержание
- Этап 1: Основы языка
- Этап 2: Продвинутые концепции
- Этап 3: Стандартная библиотека
- Этап 4: Паттерны и архитектура
- Этап 5: Инструменты экосистемы
- Этап 6: Продвинутый уровень
- Пет-проекты
- Ресурсы
- Инструменты разработчика
- Подборка статей
Этап 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 — интерактивный тур от создателей Go (обязательно!)
- 📖 Go by Example — краткие примеры на каждую тему
- 📖 Effective Go — официальный гайд по идиоматичному Go
- 📖 Go Documentation — вся официальная документация
- 🎥 Golang Tutorial for Beginners — TechWorld with Nana — полный курс для начинающих
- 🎥 Learn Go Programming — FreeCodeCamp (YouTube) — 6+ часов бесплатного курса
- 📝 Learn Go with Tests — учим Go через написание тестов (TDD)
Практические задания
- ✅ Пройти весь Tour of Go
- ✅ Решить 15-20 задач на Exercism (Go track)
- ✅ Написать программу «Угадай число» с вводом из консоли
- ✅ Реализовать калькулятор с поддержкой операций +, -, *, / через CLI-аргументы
- ✅ Написать утилиту подсчёта слов в файле (аналог
wc) - ✅ Реализовать простую телефонную книгу с сохранением в 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) — паттерны конкурентности
- 📖 Share Memory by Communicating (Go Blog) — ключевая философия Go
- 📖 Введение в Generics (Go Blog) — официальное введение в дженерики
- 📖 Go Concurrency Guide (GitHub) — подробный гайд по конкурентности
- 🎥 Concurrency in Go (YouTube) — Jake Wright
- 📖 Паттерны многопоточности в Go (Habr) — отличная статья на русском
- 📖 Контекст в Go: как правильно (Habr) — про context
Практические задания
- ✅ Pipeline: написать конвейер обработки данных через каналы (генератор → фильтр → обработчик)
- ✅ Fan-Out/Fan-In: параллельно скачать 10 URL и собрать результаты
- ✅ Worker Pool: реализовать пул воркеров с ограничением конкурентности
- ✅ Graceful Shutdown: HTTP-сервер с корректным завершением по сигналу
- ✅ Реализовать потокобезопасный кеш с TTL через
sync.RWMutex - ✅ Написать generic-функции
Map,Filter,Reduceдля слайсов - ✅ 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 — полный список пакетов стандартной библиотеки
- 📖 Writing Web Applications (Go Wiki) — официальный туториал по веб
- 📖 How to use the net/http package (Go Blog) — улучшения роутинга в Go 1.22
- 📖 Using Go's testing Package — официальный туториал по тестам
- 📖 Structured Logging with slog (Go Blog) — про новый slog
- 🎥 Let's Go (Alex Edwards) — книга + примеры — лучший ресурс по веб-разработке на Go
- 📖 Go Database/SQL Tutorial — работа с базами данных
Практические задания
- ✅ HTTP-сервер с CRUD API для заметок (хранение в памяти)
- ✅ Добавить к API middleware: логирование, recovery, CORS
- ✅ JSON-парсер конфигурации с валидацией
- ✅ Unit-тесты с table-driven подходом для всех API-эндпоинтов
- ✅ Бенчмарк сравнения разных подходов к конкатенации строк
- ✅ CLI-утилита с подкомандами (аналог
git: add, commit, log) - ✅ HTTP-клиент с retry-логикой, таймаутами и обработкой ошибок
- ✅ Подключить 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 |
| 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) — стандартная структура проекта
- 📖 Go-микросервисы: Clean Architecture и DDD (Habr) — отличная статья на русском
- 📖 Go Clean Architecture Template (GitHub, 7.2k⭐) — шаблон от Evrone
- 📖 Wild Workouts — Go DDD Example (GitHub, 6k⭐) — полный пример DDD + CQRS
- 📖 Todo API Microservice Example (GitHub) — DDD + Clean Architecture пример
- 📖 Practical Go: Real World Advice — Dave Cheney
- 📖 Паттерны проектирования в Golang (Habr) — обзор основных паттернов
- 🎥 MarioCarrion YouTube — Go + DDD + Microservices видео
- 📖 Go Patterns (GitHub, 25k⭐) — коллекция паттернов
Практические задания
- ✅ Рефакторить API из этапа 3 в Clean Architecture
- ✅ Выделить domain-слой с Value Objects и бизнес-правилами
- ✅ Реализовать Repository Pattern с двумя реализациями (PostgreSQL + in-memory)
- ✅ Добавить DI через конструкторы (wire up в
main.go) - ✅ Написать конфигурацию через ENV + YAML с fallback
- ✅ Реализовать Circuit Breaker для внешнего API-вызова
- ✅ Написать 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 — официальная документация
- 📖 GoLand 2025.1 — поддержка golangci-lint — JetBrains блог
- 📖 The Go Ecosystem in 2025 (JetBrains) — обзор трендов экосистемы
- 📖 Docker Official Go Guide — Docker для Go
- 📖 sqlc Documentation — type-safe SQL
- 📖 gRPC Go Quickstart — начало работы с gRPC
- 📖 golang-migrate (GitHub) — миграции
Практические задания
- ✅ Написать multi-stage Dockerfile для Go-приложения (<20MB образ)
- ✅ Настроить GitHub Actions: lint → test → build → push Docker image
- ✅ Настроить
golangci-lintс.golangci.yml(минимум 10 линтеров) - ✅ Создать Makefile с командами:
build,test,lint,run,migrate - ✅ Добавить Swagger-документацию к REST API
- ✅ Написать gRPC-сервис с protobuf
- ✅ Добавить 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) — официальный пост
- 📖 Profiling Go Programs (Go Blog) — пособие по pprof
- 📖 Getting to Go: The Journey of Go's Garbage Collector (Go Blog) — GC deep dive
- 📖 5 паттернов параллельного программирования в GO (Habr)
- 📖 7 Powerful Golang Concurrency Patterns — concurrency patterns 2025
- 📖 Pprof Through Examples
- 📖 Go Fuzzing (Official) — документация по фаззингу
- 🎥 Kavya Joshi — Understanding Channels (GopherCon) — как устроены каналы внутри
Практические задания
- ✅ Профилировать реальное приложение с
pprof, найти и устранить bottleneck - ✅ Написать бенчмарки для критичного кода и оптимизировать (минимум 2x ускорение)
- ✅ Реализовать паттерн Pipeline с graceful shutdown
- ✅ Написать fuzz-тесты для парсера/валидатора
- ✅ Реализовать свой connection pool с ограничением конкурентности
- ✅ Собрать приложение под 3+ платформы через cross-compilation
- ✅ Добавить 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⭐) — live reload для Go
- watchexec — на Rust, но отличный UX
- entr — классика 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) — чистый шаблон
- Todolist API (MarioCarrion) — DDD пример
- realworld-go — 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 или telegram-bot-api, cron, sqlite3/pgx
Аналоги для вдохновения:
- go-telegram-bot-api (GitHub) — популярная библиотека
- telebot (GitHub) — ещё одна популярная либа
Чему научишься: Работа с внешними 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) — микросервисы на Go + RabbitMQ + gRPC
- Wild Workouts (ThreeDotsLabs) — DDD + CQRS
- Watermill (ThreeDotsLabs) — библиотека для event-driven
Чему научишься: Микросервисная архитектура, message queues, gRPC, observability, distributed systems.
Проект 5: Open-Source инструмент — goscan (Code Quality Scanner)
Уровень: Продвинутый
Когда делать: После этапа 6
Срок: 4-6 недель
Описание: CLI-инструмент для анализа Go-кода: поиск антипаттернов, проверка архитектурных правил, генерация отчётов. Альтернатива: свой linter, генератор кода, или инструмент для DevOps.
Варианты проектов:
- Code scanner — AST-анализатор для поиска антипаттернов
- API mock generator — генерация моков из OpenAPI-спеки
- DB schema diff tool — сравнение схем БД и генерация миграций
- 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⭐) — мега-линтер
- staticcheck (GitHub) — статический анализатор
- go-critic (GitHub) — кастомные проверки
Чему научишься: 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 | go.dev | Официальный интерактивный тур — обязательный стартовый ресурс |
| Learn Go with Tests | GitBook | TDD-подход к изучению Go. Отлично для практиков |
| Go by Example | gobyexample.com | Краткие примеры на каждую тему |
| Exercism Go Track | exercism.org | 140+ упражнений с менторингом от сообщества |
| Gophercises | gophercises.com | Бесплатные упражнения с видео-решениями от Jon Calhoun |
| Go Recipes (GitHub) | GitHub | Огромная подборка рецептов и инструментов |
Платные
| Курс | Платформа | Описание |
|---|---|---|
| Learn Go (Boot.dev) | boot.dev | Интерактивный курс с проектами, один из лучших в 2025 |
| Go: The Complete Developer's Guide | Udemy | Stephen Grider — хорошо структурированный курс |
| Web Development w/ Go | Udemy | Todd McLeod — легенда Go-обучения |
| Ultimate Go Programming | Ardan Labs | William Kennedy — самый глубокий курс. Для серьёзного изучения |
| Let's Go / Let's Go Further | alexedwards.net | Практический курс веб-разработки (книга + код) |
| Backend-разработчик на Go (Skillfactory) | Skillfactory | Расширенный курс на русском |
YouTube-каналы
| Канал | Описание |
|---|---|
| The Go Programming Language (@golang) | Официальный канал Go — доклады с GopherCon, обновления языка |
| Anthony GG | Практичные туториалы, микросервисы, архитектура на Go |
| NicJackson | Nic Jackson (HashiCorp) — Go + DevOps, микросервисы |
| MarioCarrion | Go + DDD + Clean Architecture, production-проекты |
| Melkey | Go-проекты, системный дизайн |
| justforfunc | Francesc Campoy (ex-Google) — глубокие разборы Go |
| TechWorld with Nana | Хороший стартовый курс по Go |
| Николай Тузов (Skillbox) | Go на русском языке |
Telegram-каналы и сообщества
| Канал/Чат | Ссылка | Описание |
|---|---|---|
| Библиотека Go-разработчика | @goproglib | 23K+ подписчиков, статьи, новости, вакансии |
| 4gophers | @gophernews | Новости Go-экосистемы |
| Golang — pair programming | @golang_pair | Парное программирование на Go |
| Gopher Club | Сообщество Go разработчиков | Обсуждение Go и разработки |
| Golang Go | Сообщество СНГ Go разработчиков | Вопросы и обсуждения |
| Go (Pair programming) | — | Чат для совместного кодинга |
| r/golang (Reddit) | reddit.com/r/golang | Крупнейшее англоязычное сообщество |
| Gophers Slack | gophers.slack.com | Международный Slack Go-разработчиков |
GitHub-репозитории для изучения
Хорошо написанный Go-код, на котором стоит учиться:
| Репозиторий | Описание |
|---|---|
| avelino/awesome-go | 🏆 Каталог всех Go-библиотек и фреймворков (140k⭐) |
| golang/go | Исходный код самого Go — эталон стиля |
| kubernetes/kubernetes | Крупнейший Go-проект. Можно изучать архитектуру |
| docker/cli | Docker CLI на Go — отличный пример CLI-утилиты |
| hashicorp/terraform | Terraform — пример enterprise Go |
| prometheus/prometheus | Prometheus — мониторинг, хорошая архитектура |
| go-chi/chi | Лёгкий HTTP-роутер — чистый идиоматичный код |
| uber-go/zap | Высокопроизводительный логгер от Uber |
| evrone/go-clean-template | Шаблон Clean Architecture для Go (7.2k⭐) |
| tmrts/go-patterns | Паттерны проектирования в Go (25k⭐) |
| ThreeDotsLabs/wild-workouts-go-ddd-example | DDD + CQRS + Clean Architecture пример (6k⭐) |
| nikolaydubina/go-recipes | Рецепты и полезные трюки Go (4k⭐) |
| a8m/golang-cheat-sheet | Шпаргалка по синтаксису Go |
Подкасты
| Подкаст | Описание |
|---|---|
| Go Time (Changelog) | Главный подкаст о Go — архив из 300+ эпизодов. Финальный выпуск вышел в 2024, но архив бесценен |
| Cup o' Go | Еженедельные новости Go за ~15 минут. Актуальный и лёгкий формат |
| GolangShow | Подкаст на английском и русском (от русскоязычных авторов) |
| Go Gab | Короткие эпизоды (~3 мин) о Go |
🔧 Инструменты разработчика
IDE / Редактор
| Инструмент | Описание | Ссылка |
|---|---|---|
| GoLand (JetBrains) | Лучшая IDE для Go. Рефакторинг, отладка, поддержка golangci-lint (с 2025.1). Платная, но есть бесплатная Community Edition | jetbrains.com/go |
| VS Code + Go Extension | Бесплатная альтернатива. Extension от Go Team: gopls, delve, golangci-lint | VS Code Go |
| Neovim + gopls | Для любителей Vim. gopls как LSP, nvim-lspconfig |
gopls |
Рекомендация для тебя: GoLand (ты привык к JetBrains с Rider/ReSharper в C#-мире) или VS Code (если хочешь универсальность).
Обязательные плагины VS Code:
golang.Go— основной плагинEditorConfig— единый стиль кодаREST Client— тестирование APIDocker— работа с контейнерамиGitLens— улучшенный Git
Линтеры
| Инструмент | Описание |
|---|---|
| golangci-lint | 🏆 Мета-линтер — агрегирует 100+ линтеров в одном инструменте. Обязателен |
| staticcheck | Статический анализатор, входит в golangci-lint |
| gosec | Проверка безопасности кода |
| errcheck | Проверка необработанных ошибок |
| govet | Встроенный в Go, ищет подозрительные конструкции |
| gofumpt | Строгая версия gofmt |
| revive | Быстрый, настраиваемый линтер |
Минимальный .golangci.yml:
linters:
enable:
- errcheck
- gosimple
- govet
- ineffassign
- staticcheck
- unused
- gosec
- gofumpt
- revive
- gocritic
- exhaustive
- prealloc
- misspell
linters-settings:
gocritic:
enabled-tags:
- diagnostic
- style
- performance
Профилирование
| Инструмент | Описание |
|---|---|
| pprof | Встроенный профилировщик Go: CPU, memory, goroutines, block |
go tool pprof |
CLI для анализа pprof-данных |
go tool trace |
Трассировка выполнения программы — визуализация горутин, GC |
| Pyroscope | Continuous profiling — профилирование в production |
| fgprof | Full goroutine profiling (wall-clock time) |
Быстрый старт pprof:
import _ "net/http/pprof"
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()
go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30
go tool pprof http://localhost:6060/debug/pprof/heap
Тестирование
| Инструмент | Описание |
|---|---|
| testing | Встроенный пакет тестирования — go test ./... |
| testify | Assertions, mocks, suites — самая популярная тест-библиотека |
| gomock | Генерация моков из интерфейсов (uber-go/mock — актуальный форк) |
| testcontainers-go | Docker-контейнеры для интеграционных тестов |
| go-cmp | Умное сравнение значений от Google |
| httptest | Встроенный пакет для тестирования HTTP |
| Fuzzing | go test -fuzz=FuzzXxx — встроенное fuzz-тестирование (Go 1.18+) |
| gotestsum | Красивый вывод тестов |
Отладка
| Инструмент | Описание |
|---|---|
| Delve (dlv) | Основной отладчик Go. Breakpoints, step, goroutine inspection |
| GoLand Debugger | Встроен в GoLand, использует Delve |
| VS Code Go Debugger | Также на базе Delve, настройка через launch.json |
Команды Delve:
dlv debug ./cmd/server # запуск с отладкой
dlv test ./pkg/service # отладка тестов
dlv attach <pid> # подключение к процессу
Управление зависимостями
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 | Go REPL для экспериментов |
| gojq | jq, написанный на Go |
| goreleaser | Автоматизация релизов Go-приложений |
| ko | Сборка Go в OCI-образы без Dockerfile |
| buf | Линтер и генератор для Protobuf |
| task | Альтернатива Make на Go |
| air | Live reload для Go-разработки |
📰 Подборка статей (топ-25+)
Официальный блог Go (go.dev/blog)
- Effective Go — основа основ, обязательно прочитать
- Go Concurrency Patterns — паттерны конкурентности (pipelines)
- Advanced Go Concurrency Patterns — продвинутые паттерны
- Share Memory by Communicating — философия Go concurrency
- Error Handling and Go — обработка ошибок
- Working with Errors in Go 1.13 — errors.Is, errors.As, wrapping
- An Introduction to Generics — введение в дженерики
- Structured Logging with slog — новый пакет логирования
- Routing Enhancements in Go 1.22 — улучшения net/http
- Profiling Go Programs — профилирование
- Getting to Go: Journey of Go's Garbage Collector — GC deep dive
- Go at Google: Language Design — философия проектирования Go (Rob Pike)
Лучшие статьи на Habr
- Паттерны проектирования в Golang — обзор основных паттернов (2025)
- Паттерны многопоточности в Go — concurrency patterns
- Go-микросервисы: Clean Architecture и DDD — стандартизация архитектуры (2025)
- Обработка ошибок в Go — полный гайд (2025)
- Ошибки в Go: Обработка, Обёртки и Лучшие Практики — практичный подход (2025)
- 5 паттернов параллельного программирования в GO — OTUS
- 5 паттернов проектирования в Go на примере котиков — Singleton, Factory, etc. (2024)
- Книга «Go: идиомы и паттерны проектирования» — обзор от Питер
Англоязычные must-read статьи
- The "10x" Commandments of Highly Effective Go (JetBrains) — 10 заповедей Go (2025)
- The Go Ecosystem in 2025 (JetBrains) — тренды экосистемы
- Practical Go: Real World Advice (Dave Cheney) — практические советы
- Go Coding Official Standards and Best Practices — стандарты и best practices
- What are the best Go books in 2026? (Bitfield Consulting) — обзор книг
- Pprof Through Examples — профилирование на примерах
- Go essentials reading list (GitHub) — essential reading list
- Awesome Go Articles (GitHub) — курированный список статей
🗓 Сводная таблица прогресса
| Этап | Длительность | Статус |
|---|---|---|
| 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
- Нет классов и наследования → используй структуры + интерфейсы + embedding. Go — про композицию.
- Нет исключений →
if err != nil { return err }— это нормально и идиоматично. Привыкни. - Нет DI-контейнера → всё через конструкторы.
func NewService(repo Repository) *Service. Просто и прозрачно. - Нет LINQ → для простых операций —
forloops. Для сложных — generics (Map,Filter). - Нет async/await → горутины + каналы. Модель CSP вместо Task-based.
- Нет nuget →
go mod— проще и быстрее. - Пакеты вместо namespaces → visibility через регистр букв (заглавная = public).
- Минимализм → Go-сообщество предпочитает stdlib и маленькие библиотеки вместо фреймворков.
- gofmt → один стиль для всех. Никаких споров о форматировании.
- Быстрая компиляция → Go компилируется за секунды. После C# это будет приятным сюрпризом.
📌 Последнее обновление: Февраль 2026
📌 Файл:/home/daniil/.openclaw/workspace/golang/roadmap.md